【问题标题】:Oracle: How to tell if center 3 characters are numbers?Oracle:如何判断中间3个字符是不是数字?
【发布时间】:2022-11-24 02:37:47
【问题描述】:

如果字符串在前面某处连续有 3 个数字,我试图分隔最后一个字符,该字符应该是字母 [A-F]。

例如, 103C 将返回 2 个单独的字段 103 和 C A103B 将返回 2 个单独的字段 A103 和 B。 FX103D 将返回 2 个单独的字段 FX103 和 D。 LOCATION2 只会返回 LOCATION2,第二个字段将为空白。

我以前用 regexp_like 做过类似的事情,但我对正则表达式一般是新手,所以我不确定我是如何做到这一点的。

对于类似的应用程序,我已经完成了 regexp_like(c_lab.loc_code_from,'^\d{5}[[:alpha:]]') ,它查看前 5 个字符,如果它们是数字,则满足条件并且我相应地将其拆分,如下所示。

CASE
WHEN regexp_like(c_lab.loc_code_from,'^\d{5}[[:alpha:]]')
THEN substr(c_lab.loc_code_from, 1, 5)
ELSE c_lab.loc_code_from
END as "From Location",
CASE
WHEN regexp_like(c_lab.loc_code_from,'^\d{5}[[:alpha:]]')
THEN substr(c_lab.loc_code_from,6,1)
ELSE 'A'
END as "From Level ID"

【问题讨论】:

    标签: oracle parsing regexp-like


    【解决方案1】:

    您可以根据您的要求使用以下内容

     with data as (select 'A103B' dt from dual)
     select nvl(substr(dt,1,instr(dt,regexp_substr ( 
         dt, 
         '[[:digit:]]{3}' 
       ))+2),dt), substr(dt,instr(dt,regexp_substr ( 
         dt, 
         '[[:digit:]]{3}' 
       ))+3)
       from data;
    

    【讨论】:

      猜你喜欢
      • 2015-05-03
      • 2013-01-11
      • 2021-09-24
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多