1. ホーム
  2. sql

[解決済み] T-SQLでSplit関数に相当するものはありますか?

2022-06-13 02:57:51

質問

私は '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15...' を分割したいのですが、カンマで区切られています。(カンマ区切り)をテーブルまたはテーブル変数に分割しています。

どなたか、一行ごとに返す関数をお持ちの方はいらっしゃいませんか?

どのように解決するのですか?

やや古風な解決策を紹介します。

/*
    Splits string into parts delimitered with specified character.
*/
CREATE FUNCTION [dbo].[SDF_SplitString]
(
    @sString nvarchar(2048),
    @cDelimiter nchar(1)
)
RETURNS @tParts TABLE ( part nvarchar(2048) )
AS
BEGIN
    if @sString is null return
    declare @iStart int,
            @iPos int
    if substring( @sString, 1, 1 ) = @cDelimiter 
    begin
        set @iStart = 2
        insert into @tParts
        values( null )
    end
    else 
        set @iStart = 1
    while 1=1
    begin
        set @iPos = charindex( @cDelimiter, @sString, @iStart )
        if @iPos = 0
            set @iPos = len( @sString )+1
        if @iPos - @iStart > 0          
            insert into @tParts
            values  ( substring( @sString, @iStart, @iPos-@iStart ))
        else
            insert into @tParts
            values( null )
        set @iStart = @iPos+1
        if @iStart > len( @sString ) 
            break
    end
    RETURN

END

SQL Server 2008 では、.NET コードで同じことを実現できます。もしかしたら、より速く動作するかもしれませんが、間違いなくこのアプローチの方が管理しやすいでしょう。