如何在Oracle 11g中的varchar2字段的文本中找到多个空格?

时间:2015-07-17 01:01:49

标签: sql oracle oracle11g

我不记得曾经见过这样的字段,但它将城市,州和邮政编码组合成一个varchar2字符串。幸运的是,我相信大多数领域都处于相同的城市空间状态,空间邮政编码格式,但我开始发现一些偏离该规范的领域。

现在我正试图找出所有这些不同的条件 在数据库中有超过500万行,我的查询不能满足我的需求。

我开始时:

SELECT PROJECT_CTY_ST_ZIP FROM PAYMENT WHERE PROJECT_CTY_ST_ZIP LIKE '%' || CHR(32) || '%';

然后尝试了:

SELECT PROJECT_CTY_ST_ZIP FROM PAYMENT WHERE PROJECT_CTY_ST_ZIP LIKE '% %' AND PROJECT_CTY_ST_ZIP LIKE '% %'  AND PROJECT_CTY_ST_ZIP LIKE '% %';

但它们都是基于前导和尾随空格拉动的,我真的很想在文本内部找到空格。我不想删除它们,只需用查询识别它们,这样我就可以在我的java代码中正确解析它们,然后再插入一个插入到另一个表中的city,state和zipcode字段中。

虽然它没有在这里显示,但我在IA中找到了这个字段,没有前导空格,然后是一个前导空格,然后是两个前导空格。我修剪了带有修剪的前导空间。

WEST LIBERTY,IA 52776

这是我没想到的最后一个,我想看看是否有其他条件可能不寻常,但我的查询找不到它们,因为空格位于文本的中间:

TRUTH OR CONSQUQUENCE,NM 87901

我如何查询查找这些不同的记录?

1 个答案:

答案 0 :(得分:3)

此查询用点(。)替换每个空格,以便您可以看到它们

SELECT
  REGEXP_REPLACE(PROJECT_CTY_ST_ZIP,
                 '([[:space:]])',
                 '.') spaces_or_now_dots
  FROM PAYMENT

此查询查找具有一个或多个空格的查询。

  SELECT PROJECT_CTY_ST_ZIP
  FROM PAYMENT   
  where REGEXP_LIKE(PROJECT_CTY_ST_ZIP,
                 '[[:space:]]'
                 )

我没有考虑过开头和结尾的空格情况,因为你已经照顾过了。