使用Like和通配符的Oracle SQL

mic*_*e H 3 oracle select wildcard

我正在使用以下查询来查找数据库中表的名称:

SELECT  table_name
FROM    user_tables
WHERE   table_name LIKE 'APP_X_%'
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

APP_X_ABC
APP_X_DEF
APP_X_GHI
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

APP_XYZ
APP_X123
APP_X_ABC
APP_X_DEF
APP_X_GHI
Run Code Online (Sandbox Code Playgroud)

我只需要返回X后面带有下划线的表名。我在做什么错?

Luk*_*zda 5

您需要使用ESCAPE子句:

您可以使用ESCAPE子句在模式中包含实际字符%或_,该子句标识转义字符。如果转义字符在模式中的字符%或_之前,则Oracle会在模式中按字面意义解释该字符,而不是将其解释为特殊的模式匹配字符。您也可以通过重复搜索转义字符本身。

SELECT table_name
FROM user_tables
WHERE table_name LIKE 'APP!_X!_%' ESCAPE '!';
Run Code Online (Sandbox Code Playgroud)

DBFiddle演示

_被视为通配符(任何单个字符)。但是,您需要_像原义那样。