SQL?將一列拆分成多列的實(shí)現(xiàn)示例
數(shù)據(jù)庫中有業(yè)務(wù)表t1和字典表dictionary
t1表:

dictionary表:

需求一:將col列拆分成三列
SQL 代碼如下所示:
方法一:
SELECT col,a[1] a1,a[2] a2,a[3] a3 FROM ( SELECT regexp_split_to_array( col, ',' ), col FROM t1 ) AS dt (a)
效果:

方法二:
SELECT col, SPLIT_PART( col, ',', 1 ) a1, SPLIT_PART( col, ',', 2 ) a2, SPLIT_PART( col, ',', 3 ) a3 FROM t1
效果:

假設(shè)想把 "col" 列分成 "col1" 、 "col2"、 "col3",SQL語句:
1、先添加新的列
ALTER TABLE t1 ADD COLUMN col1 VARCHAR(30); ALTER TABLE t1 ADD COLUMN col2 VARCHAR(30); ALTER TABLE t1 ADD COLUMN col3 VARCHAR(30);
2、再用 SPLIT_PART 函數(shù)填充新的列
UPDATE t1 SET col1 = SPLIT_PART( col, ',', 1 ), col2 = SPLIT_PART( col, ',', 2 ), col3 = SPLIT_PART( col, ',', 3 );
效果:

需求二:列col保存的數(shù)據(jù),是字典表dictionary中id值拼接的字符串,想關(guān)聯(lián)出對(duì)應(yīng) 的name值。
SQL 代碼如下所示:
SELECT col, (SELECT name from dictionary WHERE id=a[1]) a1, (SELECT name from dictionary WHERE id=a[2]) a2, (SELECT name from dictionary WHERE id=a[3]) a3 FROM ( SELECT regexp_split_to_array( col, ',' ), col FROM t1 ) AS dt (a)
效果:

需求三:列col轉(zhuǎn)化為字典表dictionary中name拼接的字符串
SQL 代碼如下所示:
SELECT col,CONCAT_WS(',',a1,a2,a3) as names
FROM
(
SELECT col,
(SELECT name from dictionary WHERE id=a[1]) a1,
(SELECT name from dictionary WHERE id=a[2]) a2,
(SELECT name from dictionary WHERE id=a[3]) a3
FROM
(
SELECT regexp_split_to_array( col, ',' ), col FROM t1
) AS dt (a)
) as temp效果:

總結(jié) :
我們可能會(huì)遇到按分隔符拆成多行或者多列的情況,以及復(fù)制的業(yè)務(wù)需求,只需視情況調(diào)整sql語句,或者編寫存儲(chǔ)過程。
對(duì)于列col的值,按分隔符拆分為多列數(shù)據(jù)時(shí),不知道需要拆分成幾列,可以先用以下sql查詢出列數(shù)。
SELECT max(array_length(regexp_split_to_array(col,','),1))
到此這篇關(guān)于SQL 將一列拆分成多列的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SQL 一列拆分成多列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
企業(yè)管理器備份和還原SQL Server數(shù)據(jù)庫
本文我們主要介紹了利用SQL Server數(shù)據(jù)庫的企業(yè)管理器來備份和還原數(shù)據(jù)庫的方法以及每日自動(dòng)備份數(shù)據(jù)庫的設(shè)置,希望能夠?qū)δ兴鶐椭?/div> 2015-08-08
SQL CONVERT轉(zhuǎn)化函數(shù)使用方法小結(jié)
此樣式一般在時(shí)間類型(datetime,smalldatetime)與字符串類型(nchar,nvarchar,char,varchar) 相互轉(zhuǎn)換的時(shí)候才用到.2010-05-05
SQL?Server跨庫/服務(wù)器查詢及拓展知識(shí)點(diǎn)
因?yàn)闃I(yè)務(wù)要求,之前碰到需要跨服務(wù)器操作另一個(gè)數(shù)據(jù)庫的數(shù)據(jù),這里總結(jié)下,這篇文章主要給大家介紹了關(guān)于SQL?Server跨庫/服務(wù)器查詢及拓展知識(shí)點(diǎn)的相關(guān)資料,需要的朋友可以參考下2023-11-11
sql語句查詢數(shù)據(jù)庫中的表名/列名/主鍵/自動(dòng)增長值實(shí)例
sql語句查詢數(shù)據(jù)庫中的表名/列名/主鍵/自動(dòng)增長值實(shí)例,需要的朋友可以參考下2012-06-06
Activiti-Explorer使用sql server數(shù)據(jù)庫實(shí)現(xiàn)方法
本文主要介紹Activiti-Explorer使用sql server數(shù)據(jù)庫,這里整理了詳細(xì)的資料來說明Activiti-Explorer使用SQL Server的實(shí)例,有興趣的小伙伴可以參考下2016-08-08
根據(jù)多條件查詢臨時(shí)表 想得到不同結(jié)果集的方法
很多情況下,需要采用多個(gè)參數(shù)來查詢一張臨時(shí)表,每個(gè)參數(shù)都要求得到不同的臨時(shí)表結(jié)果集。而往往某些參數(shù)并不對(duì)應(yīng)這張臨時(shí)表中的字段,而是對(duì)應(yīng)與該臨時(shí)表ID關(guān)聯(lián)的另一張表的字段。2009-11-11
SqlServer 序號(hào)列的實(shí)現(xiàn)方法
對(duì)于 SQL SERVER 2000 及更早的版本,需要使用一個(gè)自增列,結(jié)合臨時(shí)表來實(shí)現(xiàn)。2009-06-06最新評(píng)論

