首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regexp_substr查找两个字母单词

regexp_substr查找两个字母单词
EN

Stack Overflow用户
提问于 2017-12-07 15:16:41
回答 2查看 916关注 0票数 0

我在Oracle中有一个地址字段,我需要从其中提取国家代码。

代码语言:javascript
复制
select  '111 BROADWAY ~ ST LOUIS, WA 58585' from dual   
union  
select  '111 BROADWAY ~ ST LOUIS, WA' from dual  
union  
select  '111 BROADWAY ~ ST LOUIS,58585 WA' from dual

有时,状态代码WAPostal Code之前,有时在后面。在某些情况下,Postal code也不存在。

在所有这些情况下,需要帮助提取WA

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-07 15:31:57

下面是如何找到最后一个子字符串,该子字符串由两个字母组成,前面有一个空格,后面跟着一个空格或字符串的结尾:

代码语言:javascript
复制
select ...., 
       regexp_substr(address, '.*( ([[:alpha:]]{2})( |$))', 1, 1, null, 2) as state_code
...........

正则表达式查找一个空格,后面跟着两个字母,后面跟着一个空格或字符串的末尾。在此之前,.*保证我们找到了最后一个这样的事件。然后,REGEXP函数只返回两个字母(第二对圆括号中的模式部分,从左边计数;这是REGEXP_SUBSTR的最后一个参数的意思)。

票数 1
EN

Stack Overflow用户

发布于 2017-12-07 20:48:20

在模式参数中放置美国的缩写代码(2个字母)

这只是一个数学人的答案的排列。由于我们已经定义了和相对较短的州代码列表,我们可以将状态代码(来自usps网站)放置在模式参数中,并使用交替运算符将它们分开。

代码语言:javascript
复制
SCOTT@db>WITH tst AS (
  2      SELECT
  3          '111 BROADWAY ~ ST LOUIS, WA 58585' us_addrss
  4      FROM
  5          dual
  6      UNION ALL
  7      SELECT
  8          '111 BROADWAY ~ ST LOUIS, WA' us_addrss
  9      FROM
 10          dual
 11      UNION ALL
 12      SELECT
 13          '111 BROADWAY ~ ST LOUIS,58585 WA' us_addrss
 14      FROM
 15          dual
 16  ) SELECT
 17      regexp_substr(t.us_addrss,'( |,)(AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY)( |$)' state_code
 18  ,1,1,'c',2)
 19    FROM
 20      tst t;
state_code
------
WA
WA
WA

其他两个字母匹配将不包括在内。此外,我使用的match参数'c',将调用case来匹配。

这个案例要求没有被识别出来,但是根据提供的样本,它看起来是一致的。

更多解释:

-My匹配模式使用三个字符组,我在子表达式参数中引用第二个字符组。

-I检查两个字母代码前面的空格或逗号。在您的示例中,在州代码之前总是有一个空格。

-I检查在状态代码之后结束的空格或列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47698209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档