我现有的 SQL 如下所示(这是一个人为的示例):
DECLARE @Var NVARCHAR(256)
SELECT @Var = SomeValue
FROM SomeTable
SELECT *
FROM AnotherTable B
WHERE @Var IN ('One','Two','Three')
OR (@Var IN ('Four','Five') AND [Some Other Condition])
当 @Var 等于单个值(如“Two”)时,这非常有效。但现在规范已经改变,@Var 现在可以等于逗号分隔的字符串,如“Two,Four”。更改上述代码以支持该功能的最佳方法是什么?
明显/强力的方法是将其更改为使用多个 LIKE:
SELECT *
FROM AnotherTable B
WHERE (@Var LIKE '%One%' OR @Var LIKE '%Two%' OR @Var LIKE '%Three%')
OR ((@Var LIKE '%Four%' OR @Var LIKE '%Five%')) AND [Some Other Condition])
但是有更好的方法吗?
我希望 SQL Server 支持正则表达式,但遗憾的是它非常有限,而且据我所知不支持搜索多个单词。
有什么想法吗?
我和西格曼宁在一起。
下面使用该答案中的函数。
declare @var nvarchar(max) = 'one,two';
SELECT
*
INTO #tmp_passed_variables
FROM [dbo].[Split](@var, ',')
select * from #tmp_passed_variables
结果
项目 |
---|
一个 |
两个 |
SELECT
*
INTO #tmp_AnotherTable
FROM(
VALUES ('data1'),('data2')
) x (id)
SELECT *
FROM #tmp_AnotherTable B
WHERE (SELECT 1 FROM #tmp_passed_variables var WHERE var.items in('five') ) = 1
SELECT *
FROM #tmp_AnotherTable B
WHERE (SELECT 1 FROM #tmp_passed_variables var WHERE var.items in('one') ) = 1
查询1没有结果
查询 2 有结果
id |
---|
数据1 |
数据2 |
您应该能够根据需要完成所有工作,以满足您的最终需求。