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