MSSQL—字符串分離(Split函數)

前面提到了記錄合併,有了合併需求確定也會有分離需求,說到字符串分離,你們確定會想到SPLIT函數,這個在.NET,Java和JS中都有函數,很惋惜在SQL SERVER中沒有,咱們只能本身來寫這麼一個函數。函數

首先來分析一下怎麼寫這個函數,以以前合併的字符串爲例,「張三,李四,王五,錢六,趙七,Tom,Amy,Joe,Leo」,如今要將此字符串按照「,」進行分離獲得一組數據,如今能夠得出這個函數傳入變量有兩個,一個是目標字符串,咱們定義爲@string,數據類型爲nvarchar(500),選擇nvarchar()是爲了兼顧全部Unicode字符集,好比中文;另外一個變量爲分隔符,咱們定義爲@separator,數據類型爲nvarchar(10),輸出變量則定義爲@array,一個單列列名爲String,數據類型爲nvarchar(500)的Table。測試

下面來分析具體的拆分方法,以字符串「張三,李四,王五,錢六,趙七,Tom,Amy,Joe,Leo」爲例,首先得找到第一個「,」,而後把「張三」截取出來,而後將目標字符串變成「李四,王五,錢六,趙七,Tom,Amy,Joe,Leo」,而後再找第一個「,」,把「李四」截取出來,依次類推,直到找不到「,」,有了這個思路,下面就直接實現,查找字符串在程序語言中通常用indexOf方法,截取通常用Substring方法,SQL SERVER中有SUBSTRING函數用來截取字符串,可是沒有indexOf查找函數,取而代之的是CHARINDEX和PATINDEX函數,CHARINDEX用於徹底匹配查找,而PATINDEX用於模糊匹配查找,根據咱們的需求,選用CHARINDEX函數,整個SPLIT函數代碼以下:code

CREATE FUNCTION [dbo].[SPLIT]  blog

( 字符串

-- Add the parameters for the function here get

@string nvarchar(500),   string

    @separator nvarchar(10)  it

) io

RETURNS @array TABLE(String nvarchar(500))  function

AS

BEGIN

-- Declare the return variable here

DECLARE @separatorIndex int,@tempString nvarchar(500),@tagString nvarchar(500)

-- Add the T-SQL statements to compute the return value here

    SET @tagString=@string

SET @separatorIndex=CHARINDEX(@separator,@tagString)  

    WHILE(@separatorIndex<>0)

BEGIN

        SET @tempString = SUBSTRING(@tagString,1,@separatorIndex-1)  

        INSERT INTO @array(String) VALUES(@tempString)  

        SET @tagString = SUBSTRING(@tagString,@separatorIndex+1,LEN(@tagString)-@separatorIndex)  

        SET @separatorIndex=CHARINDEX(@separator,@tagString)  

    END  

    SET @tempString = @tagString  

    IF (LEN(@tempString)>0)  

        INSERT INTO @array(String) VALUES(@tagString)  

-- Return the result of the function

RETURN

END

GO

接着測試一下:

SELECT * FROM dbo.SPLIT(N'張三,李四,王五,錢六,趙七,Tom,Amy,Joe,Leo',',')

能夠獲得以下結果:

image

相關文章
相關標籤/搜索