Sql 如何同时使用通配符(LIKE)和数组(IN)进行选择?

Sql 如何同时使用通配符(LIKE)和数组(IN)进行选择?,sql,sql-like,Sql,Sql Like,在SQL中,如果要使用通配符执行选择,请使用: SELECT * FROM table_name WHERE field_name LIKE '%value%' SELECT * FROM table_name WHERE field_name IN ('one', 'two', 'three') 如果要使用可能值的数组,请使用: SELECT * FROM table_name WHERE field_name LIKE '%value%' SELECT * FROM table_nam

在SQL中,如果要使用通配符执行选择,请使用:

SELECT * FROM table_name WHERE field_name LIKE '%value%'
SELECT * FROM table_name WHERE field_name IN ('one', 'two', 'three')
如果要使用可能值的数组,请使用:

SELECT * FROM table_name WHERE field_name LIKE '%value%'
SELECT * FROM table_name WHERE field_name IN ('one', 'two', 'three')
但是,如果同时使用通配符和数组,您会怎么做

有点像:

SELECT * FROM table_name WHERE field_name LIKE IN ('%one', '_two', 'three[abv]')

您可以将join与like语句一起使用,如下查询:

SELECT * FROM table_name t 
JOIN dbo.Split('one,two,three',',') s ON t.field_name LIKE N'%'+s.item+'%'
我创建此函数以拆分字符串:

CREATE FUNCTION [dbo].[Split] (@StringToSplit NVARCHAR(MAX), @SpliterChar CHAR(1))
RETURNS
    @returnList TABLE ([item] [NVARCHAR] (500))
AS
BEGIN
 DECLARE @nItem NVARCHAR(500);
 DECLARE @pos INT; 
 WHILE CHARINDEX(@SpliterChar, @StringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(@SpliterChar, @StringToSplit); 
  SELECT @nItem = SUBSTRING(@StringToSplit, 1, @pos-1);
  if (@nItem <> '') INSERT INTO @returnList SELECT @nItem;
  SELECT @StringToSplit = SUBSTRING(@StringToSplit, @pos+1, LEN(@StringToSplit)-@pos);
 END
 if (@StringToSplit<>'') INSERT INTO @returnList SELECT @StringToSplit;
 RETURN
END
创建函数[dbo].[Split](@StringToSplit NVARCHAR(MAX),@SpliterChar(1))
返回
@返回列表表([项目][NVARCHAR](500))
作为
开始
宣布@nItem NVARCHAR(500);
声明@pos INT;
而CHARINDEX(@SpliterChar,@StringToSplit)>0
开始
选择@pos=CHARINDEX(@SpliterChar,@StringToSplit);
选择@nItem=SUBSTRING(@StringToSplit,1,@pos-1);
如果(@nItem“”)插入到@returnList中,请选择@nItem;
选择@StringToSplit=SUBSTRING(@StringToSplit,@pos+1,LEN(@StringToSplit)-@pos);
结束
如果(@StringToSplit“”)插入到@returnList中,请选择@StringToSplit;
返回
结束

如果您使用的是MySQL,这是一个可能的重复:可能的重复我希望避免这方面的开销,但这似乎是唯一的方法。事实上,即使这样做也会造成巨大的开销,因为我有一个包含数百个条目的数组。使用just-IN很快。喜欢需要永远:/