SQL 带方括号的服务器 LIKE 直接工作但不使用变量

SQL Server LIKE with square brackets works directly but not using variable

我在类似的地方使用方括号来表示通配符的范围。 奇怪的是,直接在语句中使用表达式可以正常工作,获取预期的行。但是从变量使用相同的表达式不会带来任何结果。 为什么它对变量不起作用?

作品:

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, '%');

我也试过用 + 连接,但仍然得到零结果(LIKE '%' + @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