SQL Developer中的名片搜索

问题描述 投票:0回答:1

预先感谢!

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

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

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

sql regex oracle where-clause sql-like
1个回答
0
投票

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

但是,与SQL Server不同,Oracle通过regexp_*函数为正则表达式提供了适当的支持。如果想要不包含数字的值,可以执行以下操作:

where not regexp_like(plan_name, '\d')
© www.soinside.com 2019 - 2024. All rights reserved.