[SQL Server][T-SQL]CONCAT_WS串接分隔字元強化(SQL Server 2017)

如果打算將SQL查詢結果串接成逗號分隔的csv檔案,用ETL工具、BCP、用管理工具在查詢結果按右鍵等都可以實現,但如果想單靠SQL語法,MySQL可以用concat-ws()函式,在SQL Server我們就得用上很長的語法串接(+號 or CONCAT),今晚是新加坡F1夜戰第10年,一邊看賽車一邊來吃SQL 2017新的語法糖。

 

建立測試環境

CREATE TABLE foo (
  id INT IDENTITY(1, 1) NOT NULL,
  a NVARCHAR(50),
  b NVARCHAR(50),
  c NVARCHAR(50),
  d NVARCHAR(50),
  PRIMARY KEY (id)
);
INSERT INTO foo (a, b, c, d) VALUES ('a', 'b', 'c', 'd'),('1','2','3','4'),(N'甲',N'乙',N'丙',N'丁'),(N'Ⅰ',N'Ⅱ',N'Ⅲ',N'IV')

查詢測試資料表

如果要串接成以下CSV檔案內容

1,a,b,c,d
2,1,2,3,4
3,甲,乙,丙,丁
4,Ⅰ,Ⅱ,Ⅲ,IV

 


SQL 2017以前的語法

SELECT CONCAT(id,',',a,',',b,',',c,',',d) AS csv_data from foo

T-SQL程式中出現很多單引號,就像C#看到程式碼裡頭有很多雙引號的字串。

 


SQL 2017語法

好,來試試新語法CONCAT_WS

SELECT CONCAT_WS(',',id,a,b,c,d) AS csv_data from foo

清爽了,感恩Seafood 讚嘆Seafood!

 

2008 新加坡F1

今天法拉利鬩牆..

 


參考

CONCAT (Transact-SQL)

CONCAT_WS (Transact-SQL)

MySQL CONCAT-WS