sql喜欢声明捡起意想不到的结果

时间:2015-03-03 18:22:10

标签: sql-server tsql

我有一个简单的表,如下所示

id, target
-----------
1, test_1
2, test_2
3, test_3
4, testable

我有一个简单的查询:

select * from my_table where target like 'test_%'

我期待的是前3条记录,但我获得了所有4条记录

参见SQLFiddle example here

4 个答案:

答案 0 :(得分:6)

下划线是一种模式匹配角色。试试这个:

select * from my_table where target like 'test[_]%'

答案 1 :(得分:6)

_也是一个通配符。你可以逃脱它:

... like 'test\_%' escape '\'

答案 2 :(得分:4)

您使用的下划线字符_是单个字符的通配符,因此它返回4行。尝试使用[_]而不是_。

说明..

CREATE TABLE #tmp (val varchar(10)) 

INSERT INTO #tmp (val)
VALUES ('test_1'), ('test_2'), ('test_3'), ('testing')

-- This returns all four
SELECT * FROM #tmp WHERE val LIKE 'test_%'

-- This returns the three test_ rows
SELECT * FROM #tmp WHERE val LIKE 'test[_]%'

答案 3 :(得分:3)

下划线是一个通配符,表示"匹配任何字符单个字符",就像%是一个通配符,表示"匹配任何0个或多个字符"。如果您熟悉正则表达式,则下划线字符相当于那里的点。你需要正确地逃避下划线以便按字面意思匹配该字符。