喜欢不在SQL中工作

时间:2013-10-25 19:42:09

标签: sql-server tsql matching sql-like

考虑这个TSQL

declare @b varchar(100)

set @b = 'BANK-41'

IF @b LIKE 'BANK_%'
BEGIN
    print 'Wrong Matching'
END

为什么TSQL与字符串“BANK-”和“BANK_”匹配?

4 个答案:

答案 0 :(得分:6)

在TSQL中,下划线是表示单个字符的通配符。

为了逃避,你需要用方括号包装它,如下所示:

'BANK [_]%'

查看此页面: http://www.dirigodev.com/blog/web-development-execution/escaping-percent-and-underscore-characters-in-t-sql-like-clause/

答案 1 :(得分:3)

我认为SQL Server中的下划线是为外卡字符保留的。你需要逃避它。我想你可以把它放在括号中:

%[_]%

答案 2 :(得分:2)

你需要逃避“_”。它是Like语句的特殊字符。您可以将其括在[]。

请参阅 LIKE (Transact-SQL)

答案 3 :(得分:1)

尝试LIKE ESCAPE

SELECT  
    x.Col1,
    CASE WHEN x.Col1 LIKE 'BANK_%' THEN 1 ELSE 0 END AS Test#1, 
    CASE WHEN x.Col1 LIKE 'BANK\_%' ESCAPE '\' THEN 1 ELSE 0 END AS Test#2
FROM (
    SELECT 'BANK-41' UNION ALL
    SELECT 'BANK_41' 
) x(Col1);

结果:

Col1    Test#1      Test#2
------- ----------- -----------
BANK-41 1           0
BANK_41 1           1