就像SQL中的通配符一样

就像SQL中的通配符一样,sql,where,Sql,Where,我正在编写一段代码,其中提供了@Variant。我希望通过在变量(运行时)中捕获多个值并在WHERE子句中传递它们来存储多个值。同理 DECLARE @Variant VARCHAR(50) SET @Variant='''25'',''33''' SELECT @Variant ---- which is actually '25','33' SELECT 'TRUE' WHERE '25' IN (@Variant) DECLARE @Variant VARCHAR(50) SET @V

我正在编写一段代码,其中提供了@Variant。我希望通过在变量(运行时)中捕获多个值并在WHERE子句中传递它们来存储多个值。同理

DECLARE @Variant VARCHAR(50)
SET @Variant='''25'',''33'''
SELECT @Variant  ---- which is actually '25','33'
SELECT 'TRUE' WHERE '25' IN (@Variant)

DECLARE @Variant VARCHAR(50)
SET @Variant='''25'',''33'''
SELECT @Variant  ---- which is actually '25','33'
SELECT 'TRUE' WHERE '25' IN (SELECT @Variant)
以上查询不起作用

--DECLARE @Variant VARCHAR(50)
--SET @Variant='''25'',''33'''
--SELECT @Variant
SELECT 'TRUE' WHERE '25' IN ('25','33')
上面是SQL Server中一个更简单的查询——如果SQL接受,我会尝试使用它。我的实际查询是在WHERE子句中的LIKE语句中传递通配符

声明@Variant VARCHAR(50) 将@Variant='''25%''或[项目编号]设置为''33%'' 选择@Variant
从表1中选择*,其中[Item_No]类似(@Variant)——我认为@variable将在执行期间替换为它的值

无论如何,更简单的方法-我在Where子句中有一个Item_No,我想为它提供多个通配符。是否有一个类似于内联函数的方法,它应该替换@variant处的文本并结合它执行

此时,
@Variant
包含一个字符串

如果
25
不等于
'25','33'
,这将永远不会匹配。(中的
正在寻找与括号中提供的至少一组值的精确匹配–相等。)


SQL不会神奇地将字符串解析为集合。你得告诉我。执行此操作的选项取决于您使用的特定DBMS。它们包括临时表和表值变量。

SQL
Like
条件将在您的场景中起作用

DECLARE @Variant VARCHAR(50)
SET @Variant='''25'',''33'''

SELECT 'TRUE' WHERE @Variant like '%25%'

这里的结果是
TRUE
。希望这会有所帮助。

标记所使用的dbms。(该代码看起来根本不像ANSI SQL…)这与
之类的
或通配符无关。请修复标记。为什么要标记“通配符”和“像”?看起来标题与问题不匹配。标签也是如此。如果是这种情况,oracle不支持select WITH from子句。如果
@Variant='25,33255256'
,该怎么办?谢谢Richard-您的解释“鉴于25不等于'25','33'这永远不会匹配”
SELECT 'TRUE' WHERE '25' IN (@Variant)
DECLARE @Variant VARCHAR(50)
SET @Variant='''25'',''33'''

SELECT 'TRUE' WHERE @Variant like '%25%'