正则表达式,它可以提取位于字符串半尾的数字
regex expression where it can extract the number positioned at the semi end in the string
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;
一种选择是使用嵌套表达式:内部 returns 文件扩展名和日期(在该扩展名之前),外部提取日期本身。
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>
您可以使用 \.
将匹配的数字锚定到文件名中句点的旁边,然后在数字周围使用捕获组以仅获取输出中的数字,使用第 6 个REGEXP_SUBSTR
的参数表明您只希望输出中的第 1 组:
SELECT REGEXP_SUBSTR('donkey_eats_pines_cones_201943_7771234_everyday_202002.txt', '(\d+)\.', 1, 1, NULL, 1) AS parameter12a
FROM dual;
输出:
202002
检查这个
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
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;
一种选择是使用嵌套表达式:内部 returns 文件扩展名和日期(在该扩展名之前),外部提取日期本身。
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>
您可以使用 \.
将匹配的数字锚定到文件名中句点的旁边,然后在数字周围使用捕获组以仅获取输出中的数字,使用第 6 个REGEXP_SUBSTR
的参数表明您只希望输出中的第 1 组:
SELECT REGEXP_SUBSTR('donkey_eats_pines_cones_201943_7771234_everyday_202002.txt', '(\d+)\.', 1, 1, NULL, 1) AS parameter12a
FROM dual;
输出:
202002
检查这个
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