【发布时间】:2021-02-05 12:01:06
【问题描述】:
我使用方括号来表示一系列通配符。 奇怪的是,直接在语句中使用表达式可以正常工作,获取预期的行。但是从变量中使用相同的表达式不会带来任何结果。 为什么它不能从变量中工作?
作品:
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, ....
【问题讨论】:
-
您的代码运行良好:dbfiddle.uk/….
-
你的变量对于模式来说不够长,所以它被截断了
-
谢谢@cf_en。这就是问题所在!我不明白为什么 Management Studio 没有通知截断
-
因为据记载它会截断值 @2k.silvio 。来自Converting Character Data:“当字符表达式转换为不同大小的字符数据类型时,对于新数据类型来说太长的值将被截断。”您正在转换
varchar(11)到varchar(10),因此该值被截断。
标签: sql sql-server sql-like