喜欢不在SQL中工作

问题描述 投票:2回答:4

考虑一下这个TSQL

declare @b varchar(100)

set @b = 'BANK-41'

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

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

sql-server tsql matching sql-like
4个回答
6
投票

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

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

'银行[_]%'

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


3
投票

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

%[_]%

2
投票

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

LIKE (Transact-SQL)


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
© www.soinside.com 2019 - 2024. All rights reserved.