標籤: 貨運

  • Tesla 神秘代號 D 新車 10/9 巴黎車展亮相

    Tesla 神秘代號 D 新車 10/9 巴黎車展亮相

        巴黎國際汽車大展將在 10 月 4 日登場,電動車大廠特斯拉(Tesla)也確定不會缺席。特斯拉預告 9 日將發表代號 D 的神秘新車。除此之外,特斯拉還有更多消息將宣佈,為車展提前炒熱話題。   特斯拉旗下有轎車 Model S、SUV 運動休旅車 Model X,以及正在開發之中的平價車款 Model 3。按此命名慣例,神秘新車預料將稱為 Model D。   特斯拉口風甚緊,此前外界對 Model D 毫無所悉,直至時機成熟,才由執行長 Elon Musk 透過推文對外宣布,且暗示還有其它產品消息。   Musk 曾嘲笑燃料電池,因此可以確定的是 Model D 絕非燃料電池動力車。至於 Musk 口中的其它消息指的可能是升級現有車種硬體設備,如更先進的車用資訊娛樂系統,也有傳言指出可能是全新的電動摩托車,以使特斯拉電動車產品線更多元化。     (Source:)

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※教你寫出一流的銷售文案?

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

  • 特斯拉將發表自動駕駛電動車?本週見分曉

    美國電動車大廠特斯拉(TESLA)將挺進無人車市場?特斯拉執行長穆斯克(Elon Musk)上週在推特上發表「是時候推出D和其他東西了」的推文,外界揣測將會推出新款Model D的電動車,且可能有自動駕駛功能。

    About time to unveil the D and something else

    — Elon Musk (@elonmusk)

    福斯(Volkswagen)、賓士(Mercedes-Benz)等國際車廠先後投入自動駕駛無人車的研發,穆斯克在此之前也曾表示,特斯拉正在研發多項電動車相關技術,包括預計在三年內推出具自動駕駛功能的電動車。據中時報導,穆斯克日前接受CNNMoney訪問時,即表示「再幾個月就能推出自動駕駛車」,且特斯拉電動車在明年可能就能達到90%行程由自動駕駛進行的目標。這樣的功能相當適合高速公路駕駛。

    而穆斯克的「D和其他東西」的推文,似乎指向豪華電動車Model S之外的另一款新車,且可能搭配「自動走道」(automated lane)技術。自動走道技術是一種智能駕駛系統,能讓車體自動保持在車道上行進。在車道劃分明確的高速公路上,只要車款安裝「自動車道」功能,就能讓汽車自動在車道上行駛。

    十月9日將舉行巴黎國際汽車大展,穆斯克的推文,很可能代表特斯拉將在該展上發表眾所矚目的電動休旅車、大眾車,以及自動駕駛科技。除此之外,鴻海董事長郭台銘本周末首度搭乘白色特斯拉Model S出席活動,也為特斯拉與鴻海之間的合作進展增添了不少想像空間。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

    ※教你寫出一流的銷售文案?

  • 轉銷商囤貨致民眾難買?Switch 日本二手價較新品高 1 成

    任天堂(Nintento)日前雖稱 Switch 遊戲機生產將在近期內恢復正常,不過因宅需求夯,遊戲機持續維持高人氣,加上疑似有轉銷商囤貨,導致一般民眾依舊難於買到 Switch,讓 Switch 日本二手價當前仍較新品價高出 1 成。

    日經新聞 14 日報導,任天堂雖曾在 6 月時稱 Switch 遊戲機生產將在近期內恢復正常,不過因宅需求夯,提振遊戲機產品持續維持高人氣,加上疑似有以高價轉賣為目的的「轉銷商」囤貨,導致 Switch 在日本市場上依舊難入手,目前二手價(網拍價)仍較新品價高出約 1 成。

    在調查營運網拍比較網站 aucfan 的價格行情後得知,7 月份 Switch 平均網拍成交價為 35,699 日圓,和 4 月時的高點相比雖大幅便宜了 3 成,不過仍高於新品的希望零售價格(32,978 日圓)。

    報導指出,仍有眾多消費者表示,「買不到 Switch」;日本國內分析師表示,「以高價轉賣為目的的『轉銷商』囤貨,讓一般消費者難於買到 Switch」,預估二手價要回復正常水準仍需時間。

    任天堂 14 日上漲 0.23%,收 51,320 日圓;今年迄今股價累計大漲 16.7%,表現遠優於東證一部指數(TOPIX)同期間的下挫 5.69%。

    新聞來源:https://ccc.technews.tw/2020/08/17/japan-used-switch-is-10-percent-higher-than-new-product/

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

    ※教你寫出一流的銷售文案?

  • 全球相機市占前五強出爐!Nikon 被超車、Sony 衝上第二名

    數位相機近年銷售逐漸下滑,眾品牌逐漸調整策略,大舉擁抱更輕巧的無反相機,也讓市占排名出現變化。《日經新聞》數據部門近期釋出 2019 年全球相機市占排行前五名,相較於去年出現不少變化。

    第一名仍是業界龍頭 Canon,擁有接近一半的市占率,且對比 2018 年還增加了 2.4%,現在累積至 45.4%。說明即便面臨富士、Sony 在無反領域持續進攻,Canon 仍以自身步調推出新產品,今年亦發表 EOS R5、R6 以及一系列 RF 鏡頭,有望在專業領域搶下更多死忠用戶。

    Sony 則在 2019 年首度超越 Nikon,隨著 A7 III 獲得熱烈好評,消費級別的 a6000 系列以及 RX100 也都有斬獲,市占率小幅增加至 20.2%,全年上升 0.9%。至於 Nikon 由於較晚踏入無反領域,面臨不少挑戰,2019 年市占率下滑 1.6%,整體落在 18.6%。外媒《PetaPixel》分析,隨著 Nikon 投入無反 Z 系列,今年應該能稍微止血。

    排行第四、第五的分別是富士與 Panasonic,兩者市占率皆是 4.7%,前者全年下滑 0.4%,後者則是維持不動。至於近期遭到出售的 Olympus 在 2018 年原本是第五位,如今因銷售量下滑,被擠出前五名。

    對於相機品牌來說,2019 年依舊不好過。數據亦顯示全年出貨數量僅 1483 萬台,下滑了 22%。今年碰上疫情更是雪上加霜,根據日本相機影像器材工業協會(CIPA)數據,上半年(1-6 月)數位相機總出貨量僅有 351 萬台,對比去年同期少了 51.9%,是 CIPA 於 2000 年開始公布數據以來,史上最低點的成績。

    新聞來源:https://3c.ltn.com.tw/news/41345

    【其他文章推薦】

    ※教你寫出一流的銷售文案?

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

  • 談談 Promise 以及實現 Fetch 的思路

    談談 Promise 以及實現 Fetch 的思路

    Promise 是異步編程的一種解決方案。

    Promise

    
    /**
     * 屬性
     */
    Promise.length
    Promise.prototype
    
    /**
     * 方法
     */
    Promise.all(iterable)   // 所有成功觸發成功  任何失敗觸發失敗
    Promise.race(iterable)  // 任意一個成功或失敗后觸發
    Promise.reject(reason)
    Promise.resolve(value)
    
    /**
     * 原型
     */
    Promise.prototype.constructor
    //方法
    Promise.prototype.catch(onRejected)
    Promise.prototype.then(onFulfilled, onRejected)
    Promise.prototype.finally(onFinally)
    

    Promise 有三種狀態

    • pending: 初始狀態,既不是成功,也不是失敗狀態。
    • resolve: 意味着操作成功完成。(resoloved)
    • reject: 意味着操作失敗。

    pending

    pending 是初始狀態,執行 resolve/reject 會進入對應狀態,如果不執行,責一直為 pending 狀態

    例如下面代碼,promise 將一直在 pending 狀態,不會執行 then/catch.

    new Promise(function (resolve, reject) { })
      .then(res => console.log(res))
      .catch(err => console.log(err))
    

    resolve

    resolve 意味着操作成功完成, 如果有 .then,值會傳入 .then 的第一個參數函數里。

    new Promise(function (resolve, reject) {
      resolve(1)
    })
      .then(res => console.log(res))
    

    then 的第一個參數是成功的回調,第一個參數的返回值會影響接下來鏈的去向。第一個參數的返回值一般有三種情況

    • 無返回值:會去執行下一個 .then ,沒有參數
    • 返回值非promise:調用下一個then的函數,參數為返回值
    • 返回值為promise:根據promise的執行結果,執行 下一個then/catch,如果一直是pending,則不執行下一個then/catch

    例如想要在當前 then 終止,可以這樣操作:

      .then((res) => new Promise(() => {}))
    

    reject

    reject 意味着操作失敗。

    使用 .catch 會捕獲到錯誤信息。

    與代碼報錯(如 undefined.a)不同的是, 代碼報錯如果不使用 catch 捕獲,會向外傳遞,最終傳遞到根結點;而 reject 屬於 promise 錯誤,即使不使用 catch 捕獲也不會對全局有影響。

    用 promise 實現 fetch

    先來看幾個問題:

    1. 如果請求 code 404, 會走 then 還是 catch? (答案:then)
    2. 控制台能看到一行 404 的錯誤, 為什麼還是走 then 不是 catch 呢
    3. 如果請求跨域失敗,走 then 還是 catch?(答案:catch)
    4. 同樣是控制台看到錯誤,兩者有什麼區別呢?
    5. 跨域失敗的報錯, 和 then 中 undefined.a 報錯,如果都不 catch,後者在 react 腳手架開發環境頁面會蹦,兩者有什麼區別?

    帶着這幾個問題,來看看 fetch。

    fetch 返回值是 promise,所以有三種狀態 pending、resolve、reject.

    • pending: 請求中
    • resolve: 請求成功(code 200/404/500 等, 非 200 控制台輸出錯誤)
    • reject: 請求失敗(跨域失敗、連接超時、無網絡等,控制台輸出錯誤)

    我們還發現,請求失敗時,只能 catch 到最後一行錯誤, 如圖

    捕獲后

    為什麼 404 在控制台看到錯誤,還走 then, resolve 如何實現

    實現有幾個難點,

    1. throw 後面代碼不會執行;
    2. 先報錯,后執行 then;
    3. catch 后錯誤不會打印在控制台;

    試了下,Promise.reject(‘xxx’) 這樣的報錯方式雖然是微觀任務,但是總是在.then之後才在控制台輸出,更像是宏觀任務。所以也加個setTImeout宏觀任務調至後面。

    var fetch = function () {
      return new Promise(function (resolve, reject) {
        setTimeout(function () {
          if ('請求成功 200') {
            resolve('Response數據結構');
          } else if ('請求成功 404,500等') {
            Promise.reject('GET xxxxxxxx 404');
            setTimeout(function () {
              resolve('Response數據結構');
            });
          }
        })
      })
    }
    

    請求失敗 例如跨域失敗 reject 如何實現呢

    同樣加個 setTimeout

    var fetch = function () {
      return new Promise(function (resolve, reject) {
        setTimeout(function () {
          if ('請求成功 200') {
            resolve('Response數據結構');
          } else if ('請求成功 404,500等') {
            Promise.reject('GET xxxxxxxx 404');
            setTimeout(function () {
              resolve('Response數據結構');
            });
          } else if ('請求失敗') {
            Promise.reject('Access to fetch xxxxx with CORS disabled.');
            Promise.reject('GET xxxxx net::ERR_FAILED');
            setTimeout(function () {
              reject('TypeError: Failed to fetch');
            });
          }
        })
      })
    }
    

    還是有些問題,我們實現的因為在promise 中,錯誤會有前綴 Uncaught (in promise)。瀏覽器客戶端應該有更好的實現方式。

    最後總結一下 fetch 的三種情況

    • pending: 請求中
    • resolve: 請求成功(code 200: 調用 resolve 返回數據; code: 404/500 等, 先拋錯,再調用 resolve 返回數據。)
    • reject: 請求失敗(跨域失敗、連接超時、無網絡等,先控制台拋錯,再調用 reject)

    拋錯均不影響代碼執行,與 undefined.a 不同。

    whosmeya.com

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※幫你省時又省力,新北清潔一流服務好口碑

    ※回頭車貨運收費標準

  • Pytorch入門——手把手帶你配置雲服務器環境

    Pytorch入門——手把手帶你配置雲服務器環境

    本文始發於個人公眾號:TechFlow,原創不易,求個關注

    今天這篇是Pytorch專題第一篇文章。

    大家好,由於我最近自己在學習Pytorch框架的運用,並且也是為了響應許多讀者的需求,推出了這個Pytorch專題。由於這個專題是周末加更的,所以不能保證更新進度,我盡量和其他專題一樣,每周一更。

    Pytorch簡介

    Pytorch底層是Torch框架,Torch框架是一個科學計算框架,擁有一個與Numpy類似的張量操作庫。非常靈活,但是它的語言是Lua,比較小眾,因此沒有廣泛流行。

    後來開發團隊在Torch的基礎上包裝了一層Python的Api,使得我們可以通過Python來進行調用。它是由Facebook的人工智能小組開發維護的,目前在業內也非常流行,尤其是學術界,幾乎清一色的Pytorch。它擁有兩個最大的優點,一個是動態網絡,像是TensorFlow等框架定義出來的神經網絡是靜態的,一旦寫死不能輕易改變。但是Pytorch我們可以零延遲地改變任何神經網絡。第二個有點是具有強大的GPU加速計算的工具,Pytorch的GPU加速非常好用。

    另外Pytorch的語法更加簡潔規範,更加Pythonic,學習曲線也更平穩一些。寫出來的代碼更加容易理解,更適合初學者。

    當然由於誕生的時間還短,並且在工業界的普及度還不如TensorFlow,所以它也有一些短板,比如一些底層的文檔不夠完善,一些功能欠缺等等。在我個人的學習和使用當中,我的體驗非常好,因此如果你沒有學過深度學習的框架的話,推薦使用它作為你的第一門框架。

    雲服務器

    既然是深度學習的框架,那麼最好是能夠擁有GPU環境。但是對於我們大多數人而言,GPU環境並不是一個容易的事情。比如我是Mac黨,本身的機器就沒有N卡,外接也不方便。當然沒有GPU用CPU硬肝也是可以的,不過發熱很嚴重,對電腦也有損傷。所以,最好的辦法就是租借網上的GPU雲服務器或者是雲服務。

    推薦一下滴滴雲服務器,我個人使用下來體驗還不錯,最便宜的只要兩塊多一個小時,應該比網吧上網便宜。最近在搞巨大活動,包年雲GPU只要2200,簡直是白菜價中的白菜價。注意這個優惠只能第一筆下單的時候享受。如果感興趣的話可以訪問鏈接:https://i.didiyun.com/2cvmFVGpCjz

    查看原文

    因為我是特邀用戶,所以我拿到了內部優惠的大師碼,如果要購買其他GPU雲服務器的話,可以在付款的時候輸入我的大師碼2323,可以再享受9折優惠。

    當然你也可以購買裝好環境的Notebook,或者是按照時常購買。Notebook好處是預裝了各種環境,上手可用,但是缺點是不支持定製化,一些操作不太方便。畢竟有了雲服務器可以自己搭建Notebook,但是Notebook並不支持服務器的功能。

    如果你想要使用其他雲服務器平台,可以查看我之前的文章

    想要學深度學習但是沒有GPU?我幫你找了一些不錯的平台

    環境配置

    為了防止一些小白租借了機器不會用,接下來提供一下配置環境的詳細教程(基於滴滴雲)。如果你用的別家的服務器,由於環境不一定完全相同,所以可能並不一定適用,只能當做參考。

    總之我們整個流程是:安裝Python3,安裝jupyter,配置jupyter遠程訪問,安裝Pytorch

    這些是明面上的流程,如果機器環境不健全,還會有一些隱藏流程。比如說普通的Linux環境需要配置apt-get,還需要下載git,wget等常用工具。如果沒有cuda驅動的話,還需要自己安裝cuda配置。如果其中的步驟出現了問題,還需要分析問題的原因解決問題。所以說配置環境說起來簡單,但是實際操作的時候問題並不少。

    安裝Python3

    yum install python36
    

    安裝 jupyter notebook

    sudo pip3 install ipython jupyter notebook lab
    

    設置jupyter的密碼

    jupyter notebook password
    

    生成jupyter notebook的配置,這個配置默認不存在,需要我們通過這個命令來生成。

    jupyter notebook --generate-config
    

    運行之後,會返回配置文件所在的路徑:

    我們用vim打開,修改其中的幾行:

    c.NotebookApp.ip='0.0.0.0'
    c.NotebookApp.open_browser = False
    c.NotebookApp.port =8888 # 可以自己指定
    

    我們需要將本地的端口和遠程進行綁定,這樣我們就可以在本地打開遠程的jupyter了。這一行代碼當中我們將本地的8899綁定了遠程的8888端口。這裏的8888端口就是上面配置當中的遠程的jupyter端口。

    ssh dc2-user@116.85.10.225 -L 127.0.0.1:8899:127.0.0.1:8888
    

    如果你喜歡的話,還可以安裝一下jupyter lab

    sudo pip3 install jupyterlab
    

    使用方法和notebook類似,在遠程執行命令開啟jupyter

    jupyter lab --allow-root
    

    啟動沒有問題的話,我們在本地訪問:http://localhost:8899就可以打開Jupyter,輸入密碼之後就可以使用了。

    當我們用完了雲服務器之後,要記得刪除機器。但由於平台機器數量有限,根據當前平台的設置,關機之後依然會為用戶保留資源,但是前提是需要付費。如果你是按時租的服務器顯然不能接受自己沒在使用還需要付費。針對這個問題,我們可以通過快照來解決。我們在關機之前先創建快照

    然後刪除雲服務器,下次重新創建服務器的時候選擇從快照創建。這樣下次創建的機器還可以保留當前的配置和數據,而且也不需要扣費了。如果你嫌麻煩的話,還可以加我的微信聯繫我,我幫你找到工作人員加入關機免扣費的白名單

    我們用pip安裝一下Pytorch和一些其他需要用到的包。安裝好了,之後,我們通過torch.cuda.is_avaiable()查看一下cuda的情況,如果輸出是True,那說明已經安裝好了。

    tensor

    Pytorch當中很重要的一個概念就是tensor,它直譯過來是張量,TensorFlow當中的tensor也是這個意思。我們可以認為tensor是一個高維的數組。當它是0維的時候就是一個數,一個標量。當它是一維的時候就是一個向量,二維的時候是一個矩陣,多維的時候是高維的數組。它和Numpy當中的數組類似,不過Tensor可以使用GPU進行加速。

    我們通過torch當中的接口來初始化tensor,和Numpy當中的數組類似,它支持好幾種初始化的方式。

    empty函數創建一個指定大小的未初始化的tensor,當中的元素內容是不可保證的。

    rand創建一個隨機初始化的數組:

    ones和zeros創建全是0或者全是1的數組:

    我們可以傳入類型指定元素的類型

    我們也可以通過現成的數組創建tensor:

    這些創建函數都有對應的like方法,可以傳入一個已有的tensor,創建出一個和它一樣大小的新的tensor來。

    這裏只是列舉了常用的幾種,官方的api當中還有其他的幾種創建tensor的方式:

    除此之外,tensor還支持從numpy的數組當中創建,我們可以利用from_numpy函數來實現:

    同理,我們也可以通過numpy函數,從一個tensor得到numpy的數組:

    還可以通過tolist方法將tensor轉化成Python的數組:

    函數 功能
    Tensor(*sizes) 基礎構造函數
    tensor(data,) 類似np.array的構造函數
    ones(*sizes) 全1Tensor
    zeros(*sizes) 全0Tensor
    eye(*sizes) 對角線為1,其他為0
    arange(s,e,step) 從s到e,步長為step
    linspace(s,e,steps) 從s到e,均勻切分成steps份
    rand/randn(*sizes) 均勻/標準分佈
    normal(mean,std)/uniform(from,to) 正態分佈/均勻分佈
    randperm(m) 隨機排列

    我們在創建tensor的時候不僅可以指定它們的類型,還可以指定它們存放的設備。比如是CPU還是GPU。當然前期我們暫時用不到這點,只需要記得即可。

    總結

    這是Pytorch的第一篇文章,我們簡單了解了一下這個框架,以及它當中tensor這個數據結構。簡單來說,我們可以用常用的Numpy去類比它。基本上Numpy當中有的功能它都有,它還有一些自己特性Numpy沒有的api。但不管怎麼說,萬變不離其宗,tensor的用處就是為了方便我們處理數據的

    關於Pytorch中tensor的用法還有很多,實在是沒有辦法在一篇文章當中窮盡,所以這裏只是簡單介紹,具體的用法將會放在下一篇文章當中,讓我們下周再見吧。

    如果喜歡本文,可以的話,請點個關注,給我一點鼓勵,也方便獲取更多文章。

    本文使用 mdnice 排版

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※教你寫出一流的銷售文案?

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

  • MySQL按指定字符合併及拆分

    MySQL按指定字符合併及拆分

    按照指定字符進行合併或拆分是經常碰到的場景,MySQL在合併的寫法上比較簡單,但是按指定字符拆分相對比較麻煩一點(也就是要多寫一些字符)。本文將舉例演示如何進行按照指定字符合併及拆分。

    1、 合併

    MySQL數據庫中按照指定字符合併可以直接用group_concat來實現。

    創建測試表

    mysql> create table  tb_group(id int auto_increment primary key ,col1 varchar(20));
    Query OK, 0 rows affected (0.01 sec)

    插入測試數據

    mysql> insert into  tb_group(col1) values('a'),('c'),('dddd'),('ewdw'),('vxgdh');;
    Query OK, 5 rows affected (0.01 sec)
    Records: 5  Duplicates: 0  Warnings: 0

    合併col1字段的內容

    默認是按照逗號進行合併的,例如:

    mysql> select group_concat(col1) from tb_group; 
    +---------------------+
    | group_concat(col1)  |
    +---------------------+
    | a,c,dddd,ewdw,vxgdh |
    +---------------------+
    1 row in set (0.01 sec)

    指定分隔符合併,例如指定使用 ||  符號進行合併

    mysql> select group_concat(col1,'||') from tb_group; 
    +-------------------------------+
    | group_concat(col1,'||')       |
    +-------------------------------+
    | a||,c||,dddd||,ewdw||,vxgdh|| |
    +-------------------------------+
    1 row in set (0.00 sec)

    注意

    默認情況下,合併后的長度不能超過1024,否則結果會被截斷

    例如,我再寫個腳本插入一些數據

    #  使用shell腳本來實現
    vim  test_insert.sh
    #   添加如下內容 
    
    #!/bin/bash
    # gjc
    
    for i in  {1..1025}
    do
        mysql -uroot -p'123456' --socket=/data/mysql3306/tmp/mysql.sock  -e "insert into testdb.tb_group1(col1)values('a') "
    done
    
    #  運行腳本插入數據 
    sh test_insert.sh
    mysql> select  count(*)from tb_group;
    +----------+
    | count(*) |
    +----------+
    |     1030 |
    +----------+
    1 row in set (0.00 sec)

    再進行合併

    mysql> select group_concat(col1)cols, length(group_concat(col1)) col_len from tb_group\G
    *************************** 1. row ***************************
       cols: a,c,dddd,ewdw,vxgdh,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,
    col_len: 1024
    1 row in set, 2 warnings (0.01 sec)

    可以看出,結果中總長度字節只有1024

    對於這種情況,實際使用時肯定是不滿足的,如何解決呢?其實此長度與MySQL數據庫的group_concat_max_len參數有直接關係(默認為1024)

    mysql> show global variables like 'group_concat_max_len';
    +----------------------+-------+
    | Variable_name        | Value |
    +----------------------+-------+
    | group_concat_max_len | 1024  |
    +----------------------+-------+
    1 row in set (0.08 sec)

    那我們調整一下參數看看

    /* 修改全局參數,這樣所有的新連接都會生效 */
    mysql> set  global group_concat_max_len=102400;
    Query OK, 0 rows affected (0.01 sec)
    
    /* 修改本會話參數,這樣當前連接不用退出也可以生效 */
    mysql> set  session  group_concat_max_len=102400;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show global variables like 'group_concat_max_len';
    +----------------------+--------+
    | Variable_name        | Value  |
    +----------------------+--------+
    | group_concat_max_len | 102400 |
    +----------------------+--------+
    1 row in set (0.00 sec)
    
    mysql> show  variables like 'group_concat_max_len';
    +----------------------+--------+
    | Variable_name        | Value  |
    +----------------------+--------+
    | group_concat_max_len | 102400 |
    +----------------------+--------+
    1 row in set (0.01 sec)

    再合併一下看看

    mysql> select group_concat(col1)cols, length(group_concat(col1)) col_len from tb_group\G
    *************************** 1. row ***************************
       cols: a,c,dddd,ewdw,vxgdh,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
    col_len: 2069
    1 row in set (0.01 sec)

    這樣結果就對了。因此生產環境中 該參數建議調整為合適的大小。

    (Tips:Oracle數據庫中可以使用listagg或wm_concat等多種方式實現,也比較簡單,可以自行測試)

    2、 拆分

    按指定字符拆分字符串,也是比較常見的場景。但是MySQL數據庫中字符串的拆分沒有其他數據庫那麼方便(其他數據庫直接有拆分函數),且需要藉助mysql庫中的mysql.help_topic表來輔助實現。例子如下:

    創建測試表及數據

    mysql> create table tb_split(id int primary key auto_increment,col1 varchar(20));
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert into  tb_split(col1) values('a,b,c,d'),('c,a,g,h');
    Query OK, 2 rows affected (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    按照逗號拆分

    mysql> SELECT a.id, substring_index(substring_index(a.col1, ',', b.help_topic_id + 1), ',',- 1) NAME  

    FROM tb_split a JOIN mysql.help_topic b

    ON b.help_topic_id < (length(a.col1) - length(REPLACE(a.col1, ',', '')) + 1); +----+------+ | id | NAME | +----+------+ | 1 | a | | 1 | b | | 1 | c | | 1 | d | | 2 | c | | 2 | a | | 2 | g | | 2 | h | +----+------+ 8 rows in set (0.00 sec)

    這樣也就實現了拆分。

    按指定字符拆分

    如果是其他分隔符的,修改瑞陽的分隔符字段即可。

    mysql> insert into  tb_split(col1) values('a|v|f');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select  * from tb_split;
    +----+---------+
    | id | col1    |
    +----+---------+
    |  1 | a,b,c,d |
    |  2 | c,a,g,h |
    |  3 | a|v|f   |
    +----+---------+
    3 rows in set (0.01 sec)
    
    mysql> SELECT a.id, substring_index(substring_index(a.col1, '|', b.help_topic_id + 1), '|',- 1) col_split  FROM tb_split a JOIN mysql.help_topic b ON b.help_topic_id < (length(a.col1) - length(REPLACE(a.col1, '|', '')) + 1) where a.id=3;
    +----+-----------+
    | id | col_split |
    +----+-----------+
    |  3 | a         |
    |  3 | v         |
    |  3 | f         |
    +----+-----------+
    3 rows in set (0.00 sec)

    這樣就完成按照指定字符的合併及拆分了。

    3、 結語

    本文介紹了MySQL常用的合併及拆分方法,對於擅長寫SQL的同學也可以使用其他方式實現,以便解決權限不足(例如拆分時需要使用mysql庫的help_topic表的權限)等情況下的需求。

    想了解更多內容或參与技術交流可以關注微信公眾號【數據庫乾貨鋪】或進技術交流群溝通。

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

    ※教你寫出一流的銷售文案?

  • 大數據:全球1/3碳排放 來自這20間公司

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※幫你省時又省力,新北清潔一流服務好口碑

    ※回頭車貨運收費標準

  • 彷彿來自外太空 巴黎動物園展示神祕新物種

    摘錄自2019年10月16日中央社報導

    法國巴黎動物園(Paris Zoological Park)最近展示一種名為「魔點」(blob)的神祕新生物,這種生物的淡黃色單細胞有機體外表像菌類植物,沒有嘴、胃和眼睛,卻能發現食物並加以消化。

    魔點擁有將近720種性別,沒有四肢或翅膀卻能移動,若被切成兩半,2分鐘便能自癒。巴黎國家自然史博物館(Paris Museum of Natural History)館長大衛(Bruno David)說。確定它不是植物,但不太清楚它是動物或是菌類植物。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※教你寫出一流的銷售文案?

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

  • 滅絕83年重現蹤?澳洲解密:近3年8起袋狼目擊紀錄

    摘錄自2019年10月17日自由時報報導

    澳洲袋狼自1936年宣告全數滅絕,其屬於1種有袋類的哺乳動物,澳洲政府從2016年至今已收到8起目擊報告,最近的1次是在2個月前,地點為鄰近墨爾本的島嶼塔斯馬尼亞州。

    塔斯馬尼亞州自然資源部(DPIPWE)近期釋出1份文件,當中記載澳洲在過去3年曾有8起民眾目擊袋狼出現的紀錄,分別是在2016年的2月9日,2017年的3月1日、4月24日,2018年的2月18日、2月25日、11月26日,2019年的7月29日與8月15日。

    政府發布的報告中,並未提及袋狼是否又重新出現在地球上。該物種又稱「塔斯馬尼亞虎」,過去該物種遍及澳洲草原,但因5000年前人類帶著犬類來到澳洲,逐漸壓縮袋狼生存空間,後來只剩下與澳洲大陸有一海之隔的塔斯馬尼亞州有袋狼蹤跡,而後又因人類捕殺數量逐漸稀少,至1933年最後1隻袋狼被捕獲,並送往動物園看照,並於1936年去世後,此物種宣告滅絕。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

    ※教你寫出一流的銷售文案?