在做系統開發的時候,有可能是由於之前的遺留問題,導致在資料入庫的時候,將多個資料以逗號分隔的實行,儲存在一條資料中,例如:
idvalue
1yang,zheng,song
2zhao,qian,sun
3jiang
現在因為新的需求,需要將這些資料以下邊的方式儲存在資料庫中,方便查詢和處理:
idvalue
1yang
1zheng
1song
2zhao
2qian
2sun
3jiang
所以需要將原有的資料查詢出來,然後進行逗號分隔為多行,並插入到新的表中。
假設我們需要處理的表的結構為:
name
type
lenid
int11
name
varchar
255將資料查詢並分隔的sql語句為:
selecta.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
id在join之後會得到:
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,比如:
createtable 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語句為:
selecta.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
id在join之後會得到:
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,比如:
createtable 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 然後插入帶有逗號分隔的測試資料...