正则表达式Oracle

时间:2014-06-27 14:34:55

标签: sql regex oracle

我正在学习使用正则表达式,并且我使用它们来限制搜索查询的结果,使用Oracle 11中的REGEXP_LIKE。放置一个可用数据的示例,我有以下内容:

Plan navegación 200 MB
Plan navegación 1 GB
Plan navegación 1 GB
Plan de navegacion 3G
Plan de navegacion 4G
Plan de navegacion 3G Empresarial
Plan de navegacion 4G Empresarial
Plan de servicios 3G
Plan de servicios 4G
Plan navegación Datos

我希望此结果仅限于以下(仅限3G,4G):

Plan de navegacion 3G
Plan de navegacion 4G
Plan de navegacion 3G Empresarial
Plan de navegacion 4G Empresarial

我使用以下搜索模式,但我没有正确过滤结果:

  • 上(PLAN_GSM)'(Navega(皮尔纳维加)){1} |(3G | 4G | 5G)'
  • 上(PLAN_GSM)' ((Navega(皮尔纳维加))+)(3G | 4G)+'

我做了几次测试但找不到解决方案。有人可以给我提示吗?

3 个答案:

答案 0 :(得分:1)

你可以简单地使用LIKE,如下所示:

select *
from mytable
where PLAN_GSM LIKE 'Plan de navegacion _G%';

或使用REGEXP_LIKE,如下所示:

select *
from mytable
where REGEXP_LIKE(PLAN_GSM, '^Plan de navegacion (3|4|5)G(*)');

SQL Fiddle demo

<强>参考

Oracle/PLSQL: REGEXP_LIKE Condition on Tech on the Net

答案 1 :(得分:0)

您可以使用:

SELECT * FROM mytable 
WHERE REGEXP_LIKE(mycolumn, '\APlan de navegacion \dG.*\z', 'c');
  • \d代表数字
  • \A是字符串的开头
  • .*贪婪地匹配任何字符
  • \z是字符串的结尾

答案 2 :(得分:0)

select * 
from all_tab_columns 
where COLUMN_NAME like '%MAIN%ACCOUNT%LINK%CODE%N%' and TABLE_NAME like 'CB%' and not regexp_like(table_name,'[0-9]')

上面的查询将获取没有内容的唯一对象。

select *
from all_tab_columns 
where COLUMN_NAME like '%MAIN%ACCOUNT%LINK%CODE%N%' and TABLE_NAME like 'CB%' and not regexp_like(table_name,'[0-9]')

上面的查询将仅获取具有数字内容的对象。