MySQL文本處理函數2_20160921

來源:互聯網
上載者:User

標籤:

 需求:從目前的 test_a03order 表裡面提取出來產品規格,押金的資料

一.首先添加表欄位
我們在表裡面添加這兩個欄位 命名為product_size,deposit 後期進行更新這兩個欄位內容就可以了

1 ALTER TABLE test_a03order ADD product_size VARCHAR(255) AFTER productname;#在productname之後插入規格欄位2 ALTER TABLE test_a03order ADD deposit VARCHAR(255) AFTER price;#在price之後插入押金帶元字 僅此varchar 資料類型
插入要產生的新欄位

插入欄位成功

二、分析需求屬性

1、發現產品規格,押金資料是存在於productname中的因此我們需要先看資料表內有多少個product 觀察所有產品的命名規律

1 1 SELECT productname FROM test_a03order GROUP BY productname
查看幾個產品

結果在這個表裡有4個product 分別為 "心靈雞湯(押瓶1000元)10000ml*24瓶/箱”,”橫刀奪愛丸(押瓶888元)15粒/盒","腦殘片(押瓶99元)15片/盒","鬼迷心竅湯(押瓶888元)10000ml*12瓶/箱","鬼迷心竅湯(押瓶888元)10000ml*12瓶/箱",通過觀察productname都包含一個"押"字,product_size是在字串的最後一個字,deposit位於中間的括弧裡且在"瓶"字和"元"中間 因此可以使用 LEFT() RIGHT() CHAR_LENGTH()函數進行處理 。

2、擷取product_size

1 SELECT productname,RIGHT(productname,1) AS product_size2 FROM test_a03order3 WHERE productname LIKE "%押%"
擷取product_size

3、擷取deposit 

# 我們一步一步來,先取出"瓶"字左面的左邊欄位(包含瓶這個字串本身),再取出"元"字左面的左邊欄位(包含元這個字串本身)

1 SELECT productname,2 LEFT(productname,INSTR(productname,"瓶"))AS deposit_left,3 LEFT(productname,INSTR(productname,"元")) AS deposit_leftall4 FROM test_a03order5 WHERE productname LIKE "%押%"
擷取deposit押金第一步

     這時候發現deposit_leftall 包含deposit_left字串的全部,並且差異就在押金數值,且位於deposit_leftall 欄位的右面部分,用deposit_leftall減去deposit_left不就是押金呢 但字串類型不能加減呢,因此我們需要先計算上面deposit_left,deposit_leftall的長度 用它們的長度之差 作為right()函數的參數 截取 deposit_leftall

我們為什麼用char_length()而不用length()函數截取字元長度就在於length()預設一個漢字長度為3,CHAR_LENGTH()不論中英文都預設長度為1

所以現在重新寫下SQL 

1 SELECT productname,2 LEFT(productname,INSTR(productname,"瓶")) AS deposit_left,3 LEFT(productname,INSTR(productname,"元")) AS deposit_leftall,4 CHAR_LENGTH(LEFT(productname,INSTR(productname,"瓶"))) AS deposit_left_length,5 CHAR_LENGTH(LEFT(productname,INSTR(productname,"元"))) AS deposit_leftall_length,6 RIGHT(LEFT(productname,INSTR(productname,"元")),CHAR_LENGTH(LEFT(productname,INSTR(productname,"元")))-CHAR_LENGTH(LEFT(productname,INSTR(productname,"瓶")))) AS deposit7 #上面right()這麼長代碼實質上就是right(deposit_leftall,deposit_leftall_length-deposit_left_length) 8 FROM test_a03order9 WHERE productname LIKE "%押%"
擷取deposit第二步

重新整理以下代碼把 product_size 和deposit都省去中間過程

1 SELECT productname,2 RIGHT(productname,1) AS product_size,3 RIGHT(LEFT(productname,INSTR(productname,"元")),CHAR_LENGTH(LEFT(productname,INSTR(productname,"元")))-CHAR_LENGTH(LEFT(productname,INSTR(productname,"瓶")))) AS deposit4 FROM test_a03order5 WHERE productname LIKE "%押%"
成功擷取deposit

 三、更新資料表插入的兩個欄位 

 更新欄位內容

1 UPDATE test_a03order SET product_size=RIGHT(productname,1) WHERE productname LIKE "%押%";2 UPDATE test_a03order SET `deposit`=RIGHT(LEFT(productname,INSTR(productname,"元")),CHAR_LENGTH(LEFT(productname,INSTR(productname,"元")))-CHAR_LENGTH(LEFT(productname,INSTR(productname,"瓶")))) WHERE productname LIKE "%押%"
更新資料表新插入的兩個欄位

更新成功 執行查詢查看效果

1 SELECT * FROM test_a03order
查看更新效果

四、更新成功

 

MySQL文本處理函數2_20160921

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.