与LIKE和参数的匹配不正确

阿诺迪修斯

我想比较一个字符串,看它是否包含一个子字符串,但是,当我使用一个变量时,当它应该为false时,它的值为true。

知道为什么会这样以及如何解决吗?

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
埃利·加塞特

这是一个愚蠢的问题。如果您声明为VARCHARCAST则它将自动调整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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章