Oracle查询用正则表达式查找记录

时间:2018-02-24 18:19:48

标签: regex oracle

我必须找到所有记录都有前导或尾随空格以及带有下划线(_)的记录,在带有列的表的字符串之间有前导或尾随空格,如下所示: -

注意: - *表示空格。

place_id    place_name
----------- --------------------
1           *Bilaspur
2           Jaipur*
3           Madhya*Pradesh
4           State*of*Tamilnaddu
5           **Kangra
6           Chandigrah**
7           Himachal_*Pradesh
8           Utar*_Pradesh

从上表使用正则表达式oracle查询我必须找出除了地址id 3和4之外的所有记录。

3 个答案:

答案 0 :(得分:2)

如果表格的名称为A,那么您可能需要尝试:

Select * from A where REGEXP_LIKE(place_name,'^\s|\s$|\s_|_\s','i')

<强> Click for regex demo

<强>解释

  • ^\s - 在行开头后匹配空格
  • | - 或
  • \s$ - 匹配行尾之前的空格
  • | - 或
  • \s_ - 匹配_
  • 之前的空格
  • | - 或
  • _\s - 匹配_
  • 后的空格

另见Reference

答案 1 :(得分:2)

您不需要正则表达式:

SELECT *
FROM   table_name
WHERE  place_name LIKE ' %'
OR     place_name LIKE '% '
OR     place_name LIKE '% \_%' ESCAPE '\'
OR     place_name LIKE '%\_ %' ESCAPE '\';

答案 2 :(得分:1)

又一个选择:

SQL> with test (place_id, place_name) as
  2    (select 1, ' Bilaspur'           from dual union
  3     select 2, 'Jaipur '             from dual union
  4     select 3, 'Madhya Pradesh'      from dual union
  5     select 4, 'State of Tamilnaddu' from dual union
  6     select 5, '  Kangra'            from dual union
  7     select 6, 'Chandigrah  '        from dual union
  8     select 7, 'Himachal_ Pradesh'   from dual union
  9     select 8, 'Utar _Pradesh'       from dual
 10    )
 11  select * from test
 12  where regexp_like(place_name, '^ | $|_ | _');

  PLACE_ID PLACE_NAME
---------- -------------------
         1  Bilaspur
         2 Jaipur
         5   Kangra
         6 Chandigrah
         7 Himachal_ Pradesh
         8 Utar _Pradesh

6 rows selected.

SQL>

这样的表达式返回值

  • 以空格^|
  • 开头
  • 以空格$|
  • 结尾
  • 包含下划线_