如何使用SQL

时间:2016-06-01 15:19:10

标签: sql

我必须在sql中创建一个函数,它将验证逗号分隔的字符串。

example: string will be like @str = 'AB,CD,EF,GH'

我必须检查字符串值必须是以下之一

 i.e (AB,EF,GH)

GH Cannot come alone

如果为true则函数将返回一个真正的标志。

所以,我想问一下如何将这个字符串拆分成一个数组并将该数组与该预定义的值集进行比较..

1 个答案:

答案 0 :(得分:1)

此函数将以逗号分隔列表并返回一个表,就像我认为仅适用于SQL Server 2016的STRING_SPLIT()一样。然后,您只需INNER JOIN到表根据您的条件。我通常会将一个表变量设置为此函数的结果,以便我可以重复使用它。

ALTER FUNCTION [dbo].[ufn_split_string]
(    
    @RowData NVARCHAR(MAX),
    @Delimeter NVARCHAR(MAX)
)
RETURNS @RtnValue TABLE 
(
    ID INT IDENTITY(1,1),
    DataRow NVARCHAR(MAX)
) 
AS
BEGIN 
    DECLARE @Iterator INT
    SET @Iterator = 1

    DECLARE @FoundIndex INT
    SET @FoundIndex = CHARINDEX(@Delimeter,@RowData)

    WHILE (@FoundIndex>0)
    BEGIN
        INSERT INTO @RtnValue (DataRow)
        SELECT 
            Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1, @FoundIndex - 1)))

        SET @RowData = SUBSTRING(@RowData, 
                @FoundIndex  + 1,
                LEN(@RowData))

        SET @Iterator = @Iterator + 1
        SET @FoundIndex = CHARINDEX(@Delimeter, @RowData)
    END

    INSERT INTO @RtnValue (DataRow)
    SELECT Data = LTRIM(RTRIM(@RowData))

    RETURN
END

GO