我试图筛选出一个列(plan\u name),其中包含客户的互联网计划。例如(200gb快速无限,免费附加邮箱,无限vdsl…)。我特别想过滤掉那些没有任何数字的计划。列的类型是varchar2,我正在查询一个oracle数据库。我编写了以下代码:
SELECT * FROM plans WHERE plan_name NOT LIKE '%[0-9]%'
然而,这段代码仍然返回像200gbfast这样的计划,其中包含数字?有人能解释这是为什么吗?
9njqaruj1#
甲骨文 like 语法不支持您正在尝试的那种模式匹配。这是sql server语法。甲骨文将这种模式解释为 '[0-9]' (很明显,有点像 '200GB' 不匹配)。但是,与SQLServer不同,oracle通过 regexp_* 功能。如果希望值不包含数字,可以执行以下操作:
like
'[0-9]'
'200GB'
regexp_*
where not regexp_like(plan_name, '\d')
1条答案
按热度按时间9njqaruj1#
甲骨文
like
语法不支持您正在尝试的那种模式匹配。这是sql server语法。甲骨文将这种模式解释为'[0-9]'
(很明显,有点像'200GB'
不匹配)。但是,与SQLServer不同,oracle通过
regexp_*
功能。如果希望值不包含数字,可以执行以下操作: