Where子句中的下划线会产生意外结果,为什么?

kru*_*rul 1 t-sql sql-server sql-like sql-server-2016

我想查找所有以开头的表TB_,因此我编写了以下脚本:

select *
from INFORMATION_SCHEMA.TABLES
where TABLE_NAME like 'TB_%'
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我得到了以下结果:

TB103_xxx
TB037_bbb
TB104_ccc
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么?

Jul*_*ian 8

它表示任何单个字符与“ like”结合使用。看到

MSDN-像(Transact-SQL)

  • % -零个或多个字符的任何字符串。
  • _-任何单个字符。_a将匹配aaba等等。
  • [ ] -指定范围([af])或集合([abcdef])中的任何单个字符。
  • [^] -不在指定范围([^ af])或集合([^ abcdef])中的任何单个字符。

您可以使用[_]下划线进行匹配,因此like 'TB[_]%'

或者您可以使用LIKE 'TB\_%' ESCAPE '\'.(感谢Jeroen Mostert)