一、原始記錄
在calculate_type列中有6個逗号格開的值;需要把這6個值取出來,放到每一行。
二、轉換之後的最終效果
三、實作思路
1、首先要了解一個函數的用法
substring_index(string,sep,num)
參數說明:
string:用于截取目标字元串的字元串。可為字段,表達式等。
sep:分隔符,string存在且用于分割的字元,比如“,”、“.”等。
num:序号,為非0整數。若為整數則表示從左到右數,若為負數則從右到左數。
如:
SELECT SUBSTRING_INDEX("www.wmdy.com",'.',1)
傳回值:www
SELECT SUBSTRING_INDEX("www.wmdy.com",'.',2)
傳回值:www.wmdy
SELECT SUBSTRING_INDEX("www.wmdy.com",'.',-1)
傳回值:com
SELECT SUBSTRING_INDEX("www.wmdy.com",'.',-2)
傳回值:wmdy.com
2、從上面的函數參數中能看出,需要有一個序号參數(num)
SELECT ROW_NUMBER() OVER(ORDER BY A.id) AS row_num FROM cw_calculate_type A
用ROW_NUMBER()函數拿到行号,隻要這行号的最大值大于calculate_type列中值的個數就行。
3、完整的SQL
SUBSTRING_INDEX(SUBSTRING_INDEX(B.calculate_type,',',A.row_num),',',-1)
這個sql的效果是取出前面幾個值的最後一個值。
LENGTH(B.calculate_type)-LENGTH(REPLACE(B.calculate_type,',',''))+1
這個SQL中算出calculate_type列中有多少個值。