如何在 LIKE 查询中使用破折号 (-) 字符

ade*_*ngh 3 sql oracle

在我的数据库中,我必须过滤名称以 结尾的记录-N,但是当我WHERE在下面的查询中创建子句时,它不会返回任何记录,因为它-是一个通配符。

我在 Oracle 数据库中使用此查询:

 select * from product where productname like '%-N' 
Run Code Online (Sandbox Code Playgroud)

但数据库有以该产品名称结尾的记录

Vla*_*nov 5

起初我认为Oracle允许[a-z]LIKE运算符中指定一个范围,这需要以-特殊方式处理。所以,我的建议是逃避破折号:

select * from product where productname like '%\-N' ESCAPE '\'
Run Code Online (Sandbox Code Playgroud)

https://docs.oracle.com/cd/B13789_01/server.101/b10759/conditions016.htm


另一方面,正如@Amadan 在评论中正确所说的那样,Oracle 的LIKE运算符只能识别两个通配符:_%

这意味着逃避不-应该改变任何事情。

这意味着查询中的破折号很可能与表中的破折号不同。Unicode 中有许多不同的破折号和连字符。这里是最常见的。连字符减号 (0x002D)、En-Dash (0x2013、Alt+0150)、Em-Dash (0x2014、Alt+0151)。

- – —
Run Code Online (Sandbox Code Playgroud)