在我的数据库中,我必须过滤名称以 结尾的记录-N,但是当我WHERE在下面的查询中创建子句时,它不会返回任何记录,因为它-是一个通配符。
我在 Oracle 数据库中使用此查询:
select * from product where productname like '%-N'
Run Code Online (Sandbox Code Playgroud)
但数据库有以该产品名称结尾的记录
起初我认为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)