我使用方括号来表示一个通配符范围。奇怪的是,在语句中直接使用表达式可以正常工作,获取预期的行。但是从变量中使用相同的表达式不会带来任何结果。为什么它不能从变量中工作?
:
SELECT * FROM dbo.Table WHERE Column LIKE '%B[A-Z][A-Z]%';
Results: BAA, BAB, BAC, ... until BZZ
’工作:
DECLARE @var VARCHAR(10)
SET @var = N'B[A-Z][A-Z]'
SELECT * FROM dbo.Table WHERE Column LIKE CONCAT('%', @var, '%');
我也尝试用+串联,但仍然得到零结果(像'%' + @var + '%')
当我在变量中只使用一个范围时,相同的表达式也可以工作,但我确实需要使用两个范围
SET @var = N'B[A-Z]'
SELECT * FROM dbo.Table WHERE Column LIKE '%' + @var + '%';
Results: BA, BB, BC, BD, ....
让变量变长,以便它可以存储整个模式。您可以看到PRINT @var
变量的实际值,它将显示右方括号已被删除。
declare @var varchar(10) = 'B[A-Z][A-Z]'
print @var