SQL Server自訂字串分割函數——Split

來源:互聯網
上載者:User

標籤:ring   let   自己   split   arc   代碼   create   _id   creat   

我相信大部分人都碰到過,處理資料的時候,欄位的值是以 ‘,‘ (逗號)分隔的形式,所以我也不能避免。

然後我才知道,sql 是沒有類似於 C# 和 Javascript 這種分割字串的方法。( Split )

所以我自己定義了一個 sql 函數(多聲明資料表值函式),代碼如下:

 1 USE [Test] 2 GO 3 /****** Object:  UserDefinedFunction [dbo].[Split]    Script Date: 2017/4/14 23:04:08 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 CREATE FUNCTION [dbo].[Split](@separator VARCHAR(64)=‘,‘,@string NVARCHAR(max)) 9 RETURNS @ResultTab TABLE (10     Id    INT ,11     Res     NVARCHAR(500) 12 )13 AS14 BEGIN15     DECLARE @Num INT16     17     IF(@string IS NOT NULL AND @string <> ‘‘ AND LEN(@string)>0)18     BEGIN19         IF(CHARINDEX(@separator,@string)>0)        --判斷要截取的字元是否存在20         BEGIN21             SET @Num=022             WHILE (CHARINDEX(@separator,@string)>0)        --如果要截取的字元存在,就繼續迴圈23             BEGIN24                 SET @Num=@Num+125                 26                 INSERT INTO @ResultTab(Id,Res)        --截取字串,插入表變數27                 SELECT @Num,LEFT(@string,CHARINDEX(@separator,@string)-1)28                 29                 --把已經截取並插入的字串刪除30                 SET @string=STUFF(@string,1,CHARINDEX(@separator,@string)-1+LEN(@separator),‘‘)    31             END32             33             --如果最後一個截取的字串為空白,那就不插入了34             --例如:‘123,456,789,‘ 這樣的字串最後剩下的就是Null 字元串了35             IF(@string IS NOT NULL AND @string <> ‘‘)36             BEGIN37                 INSERT INTO @ResultTab(Id,Res)38                 SELECT @Num+1,@string 39             END            40         END41         ELSE42         BEGIN43             DELETE FROM @ResultTab44         END45     END46     ELSE47     BEGIN48         DELETE FROM @ResultTab49     END50     RETURN51 END

下面來調用一下試試效果:

1 --因為這個函數建立的時候預設為以 逗號 分割,所以只需要使用 default 關鍵字就可以了2 select * from Split(default,‘123,456,789‘)3 4 select * from Split(default,‘123,456,789,‘)5 6 --下面試試其它字元分割7 select * from Split(‘abc‘,‘11111abc22222abc33333‘)8 9 select * from Split(‘abc‘,‘11111abc22222abc33333abc‘)

不足的地方就是不能直接作用於表,和不能同時支援多字元分割。

當然,如果多定義幾個參數,也是勉強可以的,不過我想的是能夠和 C# 那種可以傳入一個分割字元的數組,不過貌似 sql 自訂函數的參數不支援 table 類型。

另外,如果有什麼好的想法,可以探討一下。多謝~

SQL Server自訂字串分割函數——Split

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.