mysql查詢包含逗號的資料,並逗號拆分為多行展現

2022-06-23 09:09:11 字數 3289 閱讀 1198

在做系統開發的時候,有可能是由於之前的遺留問題,導致在資料入庫的時候,將多個資料以逗號分隔的實行,儲存在一條資料中,例如:

idvalue

1yang,zheng,song

2zhao,qian,sun

3jiang

現在因為新的需求,需要將這些資料以下邊的方式儲存在資料庫中,方便查詢和處理:

idvalue

1yang

1zheng

1song

2zhao

2qian

2sun

3jiang

所以需要將原有的資料查詢出來,然後進行逗號分隔為多行,並插入到新的表中。

假設我們需要處理的表的結構為:

name

type

lenid

int11

name

varchar

255將資料查詢並分隔的sql語句為:

select

a.id,

substring_index( substring_index( a.name, ',

', b.help_topic_id +

1 ), '

,',-

1) name

from

table1 a

join mysql.help_topic b on b.help_topic_id < ( length( a.name ) - length( replace ( a.name, '

,', '' ) ) +1)

order

by a.id

插入就比較簡單了,使用insert into語句將查出的資料插入到相應的表中即可。

查詢的主要思路在於,和乙個包含連續自增長欄位的表進行 join,得到字串分隔後的索引值,其中 

length( a.name ) - length( replace ( a.name, ',', '' ) ) + 1 語句獲得字串逗號分隔之後得到的資料長度,兩邊關聯之後,會得到相應行數的資料,比如資料
1

yang,zheng.song

在join之後會得到:

id

name

help_topic_id

1yang,zheng,song01

yang,zheng,song11

yang,zheng,song

2

之後對查詢中的結果,借助substring_index方法進行擷取,然後得到自己想要的資料。

我們在join的時候借助了 mysql.help_topic 表,表中的help_topic_id是從0到582左右連續自增的數值,所以我們可以使用,如果有遇到資料經過逗號分隔之後得到的陣列長度大於582,則需要自己建立乙個連續自增表來進行join,比如:

create

table incre_table (autoincreid int

);insert

into incre_table values (0

);insert

into incre_table values (1

);insert

into incre_table values (2

);。。。。。。。。。。

在做系統開發的時候,有可能是由於之前的遺留問題,導致在資料入庫的時候,將多個資料以逗號分隔的實行,儲存在一條資料中,例如:

idvalue

1yang,zheng,song

2zhao,qian,sun

3jiang

現在因為新的需求,需要將這些資料以下邊的方式儲存在資料庫中,方便查詢和處理:

idvalue

1yang

1zheng

1song

2zhao

2qian

2sun

3jiang

所以需要將原有的資料查詢出來,然後進行逗號分隔為多行,並插入到新的表中。

假設我們需要處理的表的結構為:

name

type

lenid

int11

name

varchar

255將資料查詢並分隔的sql語句為:

select

a.id,

substring_index( substring_index( a.name, ',

', b.help_topic_id +

1 ), '

,',-

1) name

from

table1 a

join mysql.help_topic b on b.help_topic_id < ( length( a.name ) - length( replace ( a.name, '

,', '' ) ) +1)

order

by a.id

插入就比較簡單了,使用insert into語句將查出的資料插入到相應的表中即可。

查詢的主要思路在於,和乙個包含連續自增長欄位的表進行 join,得到字串分隔後的索引值,其中 

length( a.name ) - length( replace ( a.name, ',', '' ) ) + 1 語句獲得字串逗號分隔之後得到的資料長度,兩邊關聯之後,會得到相應行數的資料,比如資料
1

yang,zheng.song

在join之後會得到:

id

name

help_topic_id

1yang,zheng,song01

yang,zheng,song11

yang,zheng,song

2

之後對查詢中的結果,借助substring_index方法進行擷取,然後得到自己想要的資料。

我們在join的時候借助了 mysql.help_topic 表,表中的help_topic_id是從0到582左右連續自增的數值,所以我們可以使用,如果有遇到資料經過逗號分隔之後得到的陣列長度大於582,則需要自己建立乙個連續自增表來進行join,比如:

create

table incre_table (autoincreid int

);insert

into incre_table values (0

);insert

into incre_table values (1

);insert

into incre_table values (2

);。。。。。。。。。。

mysql 查詢包含大寫的資料

1.問題背景 為了相容老資料,需要根據乙個欄位的全大寫還是全小寫來區分為不同類別 2.實現原理 採用mysql 正規表示式 regexp 來時實現,另外為了防止資料庫沒有設定區分大小所以也需要加上binary關鍵字 例如 select count 1 from table t where t.tit...

mysql 逗號分隔查詢

商品表 goods 有學校字段 school ids 學校字段 school ids 中儲存學校表 school 的id,如果商品包含多個學校則多個id使用逗號分隔儲存 查詢sql select g.id,g.school ids,group concat s.locality name from ...

mysql 查詢以逗號相隔的字串

首先我們建立一張帶有逗號分隔的字串。create table test id int 6 not null auto increment,primary key id pname varchar 20 not null,pnum varchar 50 not null 然後插入帶有逗號分隔的測試資料...