我想比较一个字符串,看它是否包含一个子字符串,但是,当我使用一个变量时,当它应该为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
这是一个愚蠢的问题。如果您声明为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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句