在SQL中使用通配符

时间:2016-06-21 07:58:28

标签: 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 @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语句中传递通配符。

DECLARE @Variant VARCHAR(50)     SET @Variant =''''25%''或[Item_No] LIKE''33%'''     选择@Variant
    SELECT * from Table1 WHERE [Item_No] LIKE(@Variant) - 我认为@variable将在执行期间被其值替换。

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

2 个答案:

答案 0 :(得分:2)

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

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

SELECT 'TRUE' WHERE '25' IN (@Variant)

鉴于25不等于'25','33',这永远不会匹配。 (IN正在寻找一个完全匹配 - 相等 - 至少有一个括号中提供的值集。)

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

答案 1 :(得分:0)

SQL Like条件适用于您的场景。

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

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

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