【问题标题】:Wildcard Search for a numeric range通配符搜索数字范围
【发布时间】:2020-10-07 20:29:28
【问题描述】:

我正在尝试过滤掉包含客户互联网计划的列 (plan_name)。例如(200GB 快速无限、免费附加邮箱、无限 VDSL...)。我特别想过滤掉其中没有任何数字的计划。该列的类型为 varchar2,我正在查询 Oracle 数据库。我写了以下代码:

SELECT *
FROM   plans
WHERE  plan_name NOT LIKE '%[0-9]%'

但是,此代码仍会返回包含数字的 200GB 快速计划?谁能解释这是为什么?

【问题讨论】:

标签: sql regex oracle where-clause sql-like


【解决方案1】:

Oracle 的like 语法不支持您尝试的那种模式匹配。这是 SQL Server 语法。 Oracle 将该模式解释为 litteral '[0-9]'(显然,'200GB' 之类的内容不匹配)。

但是,与 SQL Server 不同,Oracle 通过regexp_* 函数对正则表达式提供适当的支持。如果你想要不包含数字的值,你可以这样做:

where not regexp_like(plan_name, '\d')

【讨论】:

  • 非常感谢GMB! :)
猜你喜欢
  • 2017-07-17
  • 2014-11-24
  • 2012-08-04
  • 1970-01-01
  • 2021-05-22
  • 2014-04-05
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
相关资源
最近更新 更多