SQL UDF-將CSV字串轉成SELECT結果

直接把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)
)
AS
BEGIN
    DECLARE @p INT, @lastP INT, @quit CHAR(1)
    SET @p = 1
    SET @lastP = 0
    SET @quit = 'N'
    
    WHILE @quit = 'N'
    BEGIN
        SET @p = CHARINDEX(@delm, @csv, @lastP + 1)
        IF (@p = 0) 
        BEGIN
            INSERT INTO @Result VALUES 
                (SUBSTRING(@csv, @lastP + 1, LEN(@csv) - @lastP))
            SET @quit = 'Y'
        END
        ELSE
            INSERT INTO @Result VALUES 
                (SUBSTRING(@csv, @lastP + 1, @p - @lastP - 1))
        SET @lastP = @p
    END
    RETURN
END
歡迎推文分享:
Published 12 March 2009 10:56 AM 由 Jeffrey
Filed under:
Views: 14,403



意見

# DAVE said on 11 March, 2009 09:32 PM

我感動到流涙下來了。總算不用 HE 漢書,人工半自動轉換了。

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<March 2009>
SunMonTueWedThuFriSat
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication