使用正则表达式过滤选项

时间:2014-08-18 06:15:35

标签: oracle

我要求过滤表中的名称。

示例表名: - 学生

列: - 名称,类。

The date is like

名称----班级

HIGHSPEED --- C

HIGHSPEED11 --- C1

HIGHSPEED22 --- C2

师范大学-------------Ñ

正常1 ------------- N1

正常2 ------------- N2

像这样我有数据SRQ,PWE ......

我的要求是我需要使用名称删除一些数据......

SELECT distinct name  FROM student WHERE UPPER (name) LIKE 'SRP%'
                           Or UPPER (name) LIKE 'HIGHSPEED%'
                           Or UPPER (name) LIKE 'SRQ%'
                           Or UPPER (name) LIKE 'PWE%'
                           Or UPPER (name) LIKE 'SPINTERFACE%'
                           Or UPPER (name) LIKE 'SRM%'

请告诉我任何其他选项,而不是使用OR条件......?

1 个答案:

答案 0 :(得分:2)

我不是Oracle用户,但通过他们的文档快速浏览表明Oracle支持POSIX扩展正则表达式(ERE)。因此,与查询中的名称匹配的正则表达式将是:

^(SRP|HIGHSPEED|SRQ|PWE|SPINTERFACE|SRM)

看起来Oracle提供了REGEXP_LIKE函数,因此可以使用正则表达式重写您的查询:

SELECT distinct name FROM student WHERE REGEXP_LIKE(UPPER(name), '^(SRP|HIGHSPEED|SRQ|PWE|SPINTERFACE|SRM)');

我担心我无法访问Oracle进行测试,但这是正则表达式的样子。