SQL UDF-將CSV字串轉成SELECT結果
| | | 1 | |
直接把CSV轉成可以直接SELECT內容的SQL函數? 我肖想好久了,今天終於動手把它寫出來了。
我原本參考一篇Google到的文章,其中的CTE完全用SELECT搞定的寫法很酷,我曾嘗試改為Table Variable放入UDF,但測試結果不理想,速度慢了一倍(五萬次 22秒 vs 10秒)。最後還是乖乖地用WHILE LOOP實作,程式如下:
ALTER FUNCTION SplitCSV
(
@csv NVARCHAR(4000),
@delm CHAR(1))
RETURNS @Result TABLE
(
Element NVARCHAR(4000)
)
ASBEGINDECLARE @p INT, @lastP INT, @quit CHAR(1)
SET @p = 1 SET @lastP = 0SET @quit = 'N'
WHILE @quit = 'N'
BEGIN SET @p = CHARINDEX(@delm, @csv, @lastP + 1) IF (@p = 0) BEGININSERT INTO @Result VALUES
(SUBSTRING(@csv, @lastP + 1, LEN(@csv) - @lastP))SET @quit = 'Y'
END ELSEINSERT INTO @Result VALUES
(SUBSTRING(@csv, @lastP + 1, @p - @lastP - 1)) SET @lastP = @p END RETURNEND
Comments
# by DAVE
我感動到流涙下來了。總算不用 HE 漢書,人工半自動轉換了。