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

标签 sql oracle

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

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

 select * from product where productname like '%-N' 

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

最佳答案

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

select * from product where productname like '%\-N' ESCAPE '\'

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)。
- – —

关于sql - 如何在 LIKE 查询中使用破折号 (-) 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51256835/

相关文章:

ORACLE LIVE SQL 导入 CSV 数据(实时 oracle sql)

sql - Oracle select sql语句设置自增字段

Mysql:忽略表中的2个不同的列

php - 获取多列,同时减少 SQL 负载

php - 按特定间隔对 MySql-Result 进行分组

sql - 将 COUNT 的值添加到现有值

mysql - 如何使用可为空的列连接 MySQL 表?

sql - 在批量数据上执行时,使用ALTER提高列的精度是否会影响数据库性能?

oracle - 如何检查 Oracle 8 中的程序包中是否存在过程?

java - Callabe 语句 Oracle Update Skip 锁定获取无序错误