预先感谢!
我正在尝试过滤出具有客户互联网计划的列(plan_name)。例如(200GB快速无限,免费附加邮箱,无限VDSL ...)。我特别想过滤掉其中没有数字的计划。该列的类型为varchar2,我正在SQL开发人员中查询Oracle数据库。我写了下面的代码
SELECT *
FROM plans
WHERE plan_name NOT LIKE '%[0-9]%'
但是,此代码仍会快速返回200GB这样包含数字的计划?谁能解释这是为什么?
Oracle的like
语法不支持您尝试的模式匹配。这是SQL Server语法。 Oracle将模式解释为litteral '[0-9]'
(显然,类似'200GB'
之类的不匹配)。
但是,与SQL Server不同,Oracle通过regexp_*
函数为正则表达式提供了适当的支持。如果想要不包含数字的值,可以执行以下操作:
where not regexp_like(plan_name, '\d')