MySQL逗號分割欄位的行列轉換
表資料:
ID | Value |
1 | tiny,small,big |
2 | small,medium |
3 |
tiny,big |
期望得到結果:
ID | Value |
1 | tiny |
1 | small |
1 | big |
2 | small |
2 | medium |
3 | tiny |
3 |
big |
正文:
#需要處理的表 create table tbl_name (ID int ,mSize varchar(100)); insert into tbl_name values (1,'tiny,small,big'); insert into tbl_name values (2,'small,medium'); insert into tbl_name values (3,'tiny,big'); #用於迴圈的自增表 create table incre_table (AutoIncreID int); insert into incre_table values (1); insert into incre_table values (2); insert into incre_table values (3);
select a.ID,substring_index(substring_index(a.mSize,',',b.AutoIncreID),',',-1) from tbl_name a join incre_table b on b.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,',',''))+1) order by a.ID;
原理分析:
這個join最基本原理是笛卡爾積。通過這個方式來實現迴圈。
以下是具體問題分析:
length(a.Size) - length(replace(a.mSize,',',''))+1 表示了,按照逗號分割後,改列擁有的數值數量,下面簡稱n
join過程的虛擬碼:
根據ID進行迴圈
{
判斷:i 是否 <= n
{
獲取最靠近第 i 個逗號之前的資料, 即 substring_index(substring_index(a.mSize,',',b.ID),',',-1)
i = i +1
}
ID = ID +1
}
總結:
這種方法的缺點在於,我們需要一個擁有連續數列的獨立表(這裡是incre_table)。並且連續數列的最大值一定要大於符合分割的值的個數。
例如有一行的mSize 有100個逗號分割的值,那麼我們的incre_table 就需要有至少100個連續行。
當然,mysql內部也有現成的連續數列表可用。如mysql.help_topic: help_topic_id 共有504個數值,一般能滿足於大部分需求了。
改寫後如下:
select a.ID,substring_index(substring_index(a.mSize,',',b.help_topic_id+1),',',-1) from tbl_name a join mysql.help_topic b on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,',',''))+1) order by a.ID;
相關推薦
MySQL逗號分割欄位的行列轉換
表資料: ID Value 1 tiny,small,big 2 small,medium 3 tiny,big 期望得到結果: ID Value 1 tiny 1 small 1 big 2 small 2 medium 3
MySQL逗號分割欄位的行列轉換技巧
create table tbl_name (ID int ,mSize varchar(100)); insert into tbl_name values (1,'tiny,small,big'); insert into tbl_name values (2,'small,medium'); inse
MySQL逗號分割字段的行列轉換技巧
sel 判斷 內部 rtm 至少 基本 分割 數據 tro SELECT GROUP_CONCAT(REPLACE(path,‘/‘,‘,‘)) AS path FROM department b WHERE department_type = 1 執行結果:
MySQL將一個欄位中以逗號分隔的取出來形成新的欄位
1例如:要把如圖1的欄位拆分圖2 select account_id, substring_index(substring_index(a.related_shop_ids,',' ,b.help_topic_id+1),',',-1) shopid
mysql查詢某欄位的多條結果展示成按逗號隔開
mysql查詢某欄位的多條結果顯示成按逗號隔開有表:tel欄位:id tel 1 13578945620 2 13578945621 3 13578945622 4 13578945623 5 13578945624查詢tel欄位,出現的結果是這樣的:13578945620
mysql 查詢某個欄位資訊,由多個id逗號隔開拼裝成
select a.SUPPLIER_USER_ID,GROUP_CONCAT(d.ITEM_NAME) AS countyName from p_supplier_user a LEFT JOIN t
mysql left join 逗號分隔欄位查詢!
商品表 goods 有學校欄位 school_ids 學校欄位 school_ids 中儲存學校表 school 的id,如果商品包含多個學校則多個id使用逗號分隔儲存 goods: school: 查詢SQL: select g.id,g.school_id
MYSQL 查詢某欄位中包含以逗號分隔的字串的記錄方法
表中有個欄位是以逗號間隔儲存的mineralidmineral11,4,3221,2要根據mineral查詢這個表的資料怎麼查詢呢select * from xxx where find_in_set(2,mineral);查詢結果是 :idmineral21,2那麼 fin
將以逗號隔開的欄位值轉換為對應字典值小記
首先是在工作中遇到了這樣一個需求,就是要將"01,02,03"轉化成為其對應的字典值並以逗號隔開。 查詢資料後 https://www.cnblogs.com/lovehersister/p/6090338.html 可將“01,02,03”轉化為列的形式。 這樣就可以用
如何用JAVA將二進位制檔案轉換成BASE64格式儲存到MySQL的Blob欄位裡並讀出下載
由於需求要將上傳的檔案以BASE64的方式儲存到MySQL的Blob欄位,並可以讀取Blob欄位下載生成檔案,方法如下: 1、下載用於BASE64編碼轉換的sun.misc.BASE64Decoder
MySQL逗號分割字段的列轉行
需要 結果 post substring 由於 copy 結構 分割 sele 前言: 由於很多業務表因為歷史原因或者性能原因,都使用了違反第一範式的設計模式。即同一個列中存儲了多個屬性值(具體結構見下表)。 這種模式下,應用常常需要將這個列依據分隔符進行分割,並得到列轉行
Mysql查詢某個欄位出現的次數並按倒序排列
問題:mysql資料庫表名address,查詢城市city欄位出現的次數並按倒序排列 查詢語句 select city,count(*) from address group by city order by count(*) desc 執行結果如圖,按查詢欄位(城
mysql 關於某欄位去重查詢
使用distinct 和 group by 對於查詢多欄位,而只對一個欄位去重是查不到正確值得,因為distinct 後面跟多欄位,mysql會對只有這些子對完全重複才能去重,而group by 查詢的欄位也只能在 group
mysql資料庫時間欄位相差8個小時解決辦法
資料庫->mysql 持久層框架->mybatis 解決思路:使用mybatis提供的型別轉換器功能 建立DateHandler,指定泛型為Date package cn.nsu.edu.web.four.handler.mybatis; import org.ap
Mysql中 BLOB欄位轉String的方法
轉:https://www.cnblogs.com/renjie0520/p/5242350.html 1.通過sql直接轉換 select CONVERT (*** USING utf8) AS userName from usertable; 2.通過程式轉換(注
MySQL中去除欄位中的回車符和換行符
今天處理資料的時候,將Excel資料匯入MySQL後,通過SQL語句卻查不到需要的資料,後來找到一篇帖子解決了這個問題,原文地址:https://blog.csdn.net/u012586848/article/details/50997865,內容如下: 問題: 在使用【 load data
spring data jpa 查詢自定義欄位,轉換為自定義實體
目標:查詢資料庫中的欄位,然後轉換成 JSON 格式的資料,返回前臺。 環境:idea 2016.3.4, jdk 1.8, mysql 5.6, spring-boot 1.5.2 背景:首先建立 entity 對映資料庫(非專業 java 不知道這怎麼說) @Entity @Tab
【mysql】在mysql中更新欄位的部分值,更新某個字串欄位的部分內容
在mysql中更新欄位的部分值,更新某個字串欄位的部分內容 sql語句如下: update goods set img = REPLACE(img,'http://ozwm3lwui.bkt.clouddn.com','http://imgs.lqjava.com') where
JPA mysql中text欄位的對映
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
mysql查詢表和欄位的註釋
1,新建表以及新增表和欄位的註釋. create table t_user( ID INT(19) primary key auto_increment &nbs