如果打算將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
今天法拉利鬩牆..
參考