2016-06-01 14 views
1

sqlでカンマ区切り文字列を検証する関数を作成する必要があります。SQLで配列を使用してカンマ区切り文字列を検証する方法

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

は、私は次の

i.e (AB,EF,GH) 

そしてGH Cannot come aloneのいずれかでなければならない文字列値を確認する必要があります。

trueの場合、関数は真のフラグを返します。

だから、私は配列にこの文字列を分割し、値の定義済みのセットにその配列を比較することができますどのようにお願いしたいと思います。..

+0

string_split関数を使用して、単一の列テーブルに分割し、を区切り文字として使用します。このリンクhttps://msdn.microsoft.com/en-gb/library/mt684588.aspx あなたは、次のコマンドを使用して、データベースの互換性レベルを変更することができます チェック:DATABASEデータベース名SET COMPATIBILITY_LEVELをALTER = 130 – Mocas

+0

が今まであなたをしましたこれに対する解決策を見つけるか?与えられた入力で希望する出力の例を与えることができないのですか? – scsimon

答えて

1

この機能は、お使いのカンマ区切りのリストを取得し、テーブルを返すだけのようになりますSTRING_SPLIT()私はSQL Server 2016でしか使用できないと思っています。そして、あなたの条件に基づいてテーブルに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 
+0

私は既に文字列を分割してテーブルに格納する関数を作成しました。しかし、私はそれらの値を事前定義された値セットとどのように比較できないのですか。本当の偽のフラグを与えることができます。 – nihal

+0

私はこれらのいずれかのあなたのスプリッタを切り替えることをお勧めします。 http://sqlperformance.com/2012/07/t-sql-queries/split-stringsループベースのスプリッタのパフォーマンスはひどいです。 –

+0

リンク@SeanLangeありがとう – scsimon

関連する問題