2017-10-19 5 views
0

テーブルがTで、列がCであると仮定して、Cの部分文字列にオレンジ、アップル、バナナ、キウイ、イチゴ、ブルーベリー。値のSQL Serverの長いリストに列の値を比較する方法

私の実際のリストは、長さが80を超えていると私は次のことを避けるために試してみたい:

Select * from T 
Where C LIKE '%Orange%' 
OR C LIKE '%Apple%' 
OR C LIKE '%Banana%' 
OR C LIKE '%Kiwi%' 
OR C LIKE '%Strawberry%' 
OR C LIKE '%Blueberry%' 

はテーブルに私の値を挿入し、それにそれを比較する方法はありますか?私は私のクエリでこの比較を複数回行います。

答えて

1

これは私がテーブルに私のカンマ区切りのリストを変換する機能を使用し、それに参加するはずの特殊な状況のいずれかです。

CREATE FUNCTION [dbo].[udf_ConvertStringArrayToTable] (
@StringArray VARCHAR(MAX) 
) 

RETURNS @StringTable TABLE 
(
String VARCHAR(500) 
) 

AS 
BEGIN 

DECLARE @Index INT 
SET @StringArray = LTRIM(RTRIM(@StringArray)) 
WHILE LEN(@StringArray) > 0 
BEGIN 

SET @Index = CHARINDEX(',', @StringArray, 1) 
IF @Index = 0 BEGIN SET @Index = LEN(@StringArray) + 1 END 

INSERT INTO @StringTable 
SELECT SUBSTRING(@StringArray, 1, @Index - 1) 

If @Index > LEN(@StringArray) BEGIN SET @StringArray = '' END 
ELSE BEGIN SET @StringArray = SUBSTRING(@StringArray, @Index + 1, LEN(@StringArray) - @Index) END 

END 

RETURN 

END 

その後、あなたはこのようにそれを呼び出すことができます。

DECLARE @Example VARCHAR(MAX) 
SET @Example = 'Orange,Apple,Banana,Kiwi,Strawberry,Blueberry' -- etc 

SELECT 
* 
FROM 
udf_ConvertStringArrayToTable(@Example) E 
INNER JOIN T ON T.C LIKE '%' + E.String + '%' 
関連する問題