T-SQL で条件を記述してLIKE
、ワイルドカードを含むコンマ区切りのリストを文字列に一致させることは可能ですか。例を挙げてさらに説明しましょう。
フィールド内の URL のリストを区切った次のコマンドがあるとします。
'/, /news/%, /about/'
上記の文字列と一致させたい文字列の例を次に示します。
- '/'
- '/ニュース/'
- '/ニュース/2/'
- '/約/'
そして、一致しない文字列を次に示します。
- '/コンタクト/'
- '/私について/'
私は過去に、分割関数を作成し、それぞれに対して like を実行することでこれを達成しました。ただし、関数をサポートしていない SQL Server CE でクエリを機能させようとしています。
あなたが疑問に思っている場合は、分割機能を使用してそれをどのように達成したかを次に示します。
SELECT Widgets.Id
FROM Widgets
WHERE (SELECT COUNT(*) FROM [dbo].[Split](Urls, ',') WHERE @Input LIKE Data) > 0
そして、ここに分割機能があります:
CREATE FUNCTION [dbo].[Split]
(
@RowData NVARCHAR(MAX),
@Separator NVARCHAR(MAX)
)
RETURNS @RtnValue TABLE
(
[Id] INT IDENTITY(1,1),
[Data] NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @Iterator INT
SET @Iterator = 1
DECLARE @FoundIndex INT
SET @FoundIndex = CHARINDEX(@Separator, @RowData)
WHILE (@FoundIndex > 0)
BEGIN
INSERT INTO @RtnValue ([Data])
SELECT Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1, @FoundIndex - 1)))
SET @RowData = SUBSTRING(@RowData, @FoundIndex + DATALENGTH(@Separator) / 2, LEN(@RowData))
SET @Iterator = @Iterator + 1
SET @FoundIndex = CHARINDEX(@Separator, @RowData)
END
INSERT INTO @RtnValue ([Data])
SELECT Data = LTRIM(RTRIM(@RowData))
RETURN
END
誰かが助けてくれれば幸いです。ありがとう