【问题标题】:regex expression where it can extract the number positioned at the semi end in the string正则表达式,它可以提取位于字符串半端的数字
【发布时间】:2020-03-17 06:39:46
【问题描述】:

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=94771b6589b01526ad0cf6e5c4d01945

我需要帮助从文件名中提取数字子字符串
目前用于文件格式 - 'monkey_eats_mango_everyday_202002.txt' 我们是这样做的

select regexp_substr('monkey_eats_mango_everyday_202002.txt', '\d+') as parameter12a 
from dual;

结果-

202002

这又在更大的查询中用于获取此日期的最后日期,如下所示

select to_char(last_day(to_date(regexp_substr('monkey_eats_mango_everyday_202002.txt', '\d+'),  'yyyymm')), 'yyyymmdd') as parameter 
from dual ;

结果-

20200229

现在文件格式已经改变了,所以我们有了 - 'donkey_eats_pines_cones_20192301_7771234_everyday_202002.txt'

在这种文件格式中,其他地方有数字,例如 201943_7771234,可以是日期或任何随机数,所以我需要可以从文件格式中提取 202002 的正则表达式

select regexp_substr('donkey_eats_pines_cones_201943_7771234_everyday_202002.txt', '\d+') as parameter12a 
from dual;

【问题讨论】:

    标签: sql regex oracle regexp-substr


    【解决方案1】:

    您可以使用 \. 将您的数字匹配锚定到文件名中的句点旁边,然后使用数字周围的捕获组来获取输出中的数字,使用 @987654321 的第 6 个参数@ 表示您只希望输出中的第 1 组:

    SELECT REGEXP_SUBSTR('donkey_eats_pines_cones_201943_7771234_everyday_202002.txt', '(\d+)\.', 1, 1, NULL, 1) AS parameter12a 
    FROM dual;
    

    输出:

    202002
    

    Demo on dbfiddle

    【讨论】:

      【解决方案2】:

      一种选择是使用嵌套表达式:inner 返回文件扩展名和日期(在该扩展名之前),outer 获取日期本身。

      SQL> with test (col) as
        2    (select 'donkey_eats_pines_cones_201943_7771234_everyday_202002.txt' from dual)
        3  select regexp_substr(regexp_substr(col, '\d+.\w+$'), '\d+') result From test
        4  /
      
      RESULT
      ------
      202002
      
      SQL>
      

      【讨论】:

        【解决方案3】:

        检查一下

        select reverse(split_part(reverse(r.r ), '.', 2)) from 
        (
        SELECT reverse(split_part(reverse('donkey_eats_pines_cones_20192301_7771234_everyday_202002.txt'), '_', 1)) as r
        )as r
        

        回答: 202002

        【讨论】:

          猜你喜欢
          • 2011-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-10
          • 2020-05-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多