与LIKE和参数错误匹配

时间:2013-11-05 13:27:05

标签: sql-server sqlparameters

我想比较一个字符串以查看它是否包含子字符串,但是,当我使用一个变量时,它应该为false时计算结果为真。

知道为什么会这样,以及如何解决这个问题?

DECLARE @Match VARCHAR
SET @Match = '%Matching%'

SELECT CASE WHEN 'Does This Match' LIKE @Match THEN 1 ELSE 0 END -- 1
SELECT CASE WHEN 'Does This Match' LIKE '%Matching%' THEN 1 ELSE 0 END -- 0

2 个答案:

答案 0 :(得分:5)

这是一个愚蠢的问题。如果您在VARCHAR中将某些内容声明为CAST,则会将VARCHAR 正确自动调整为VARCHAR(30)。但是,在这种情况下,您只有一个VARCHAR字符。因此,当您将其设置为%Matching%因为@Match只有一个字符长时,@Match只会设置为与该短语匹配的通配符%(和任何短语! )。

DECLARE @Match VARCHAR(50)

那样做,然后有效。

完整示例:

DECLARE @BadMatch VARCHAR
SET @BadMatch = '%Matching%'


DECLARE @Match VARCHAR(20)
SET @Match = '%Matching%'

SELECT @BadMatch, @Match

SELECT CASE WHEN 'Does This Match' LIKE @Match THEN 1 ELSE 0 END -- 1
SELECT CASE WHEN 'Does This Match' LIKE '%Matching%' THEN 1 ELSE 0 END -- 0

答案 1 :(得分:1)

varchar不起作用,因为它等于varchar(1)一个字符宽。 使用varchar(SIZE)