Regex 在oracle中与Am或pm一起提取日期
我想从给定字符串Regex 在oracle中与Am或pm一起提取日期,regex,oracle,regexp-substr,Regex,Oracle,Regexp Substr,我想从给定字符串aaaaaaa_gggg_ne_A030_66788_Abcd_Oct_24_0329PM.csv 我尝试了以下方法: Select regexp_substr(filename,'\d{4}',1,3) From (Select 'Aaaaa_gggg_ne_A030_66788_Abcd_Oct_24_0329PM.csv' filename from dual); 这只会给我最后一个数字,例如,0329,但我需要0329PM嵌套substr是一个选项(如果数据总是这样;您
aaaaaaa_gggg_ne_A030_66788_Abcd_Oct_24_0329PM.csv
我尝试了以下方法:
Select regexp_substr(filename,'\d{4}',1,3)
From
(Select 'Aaaaa_gggg_ne_A030_66788_Abcd_Oct_24_0329PM.csv' filename from dual);
这只会给我最后一个数字,例如,
0329
,但我需要0329PM
嵌套substr
是一个选项(如果数据总是这样;您没有说不是这样):
- 内部
返回最后10个字符(substr
)0329PM.csv
- 外部
返回其中的前6个字符(substr
)0329PM
或者,使用正则表达式:
SQL> with test (col) as
2 (select 'Aaaaa_gggg_ne_A030_66788_Abcd_Oct_24_0329PM.csv' from dual)
3 select regexp_substr(translate(col, '_.', ' '), '\S+',
4 1,
5 regexp_count(translate(col, '_.', ' '), '\S+') - 1
6 ) result
7 from test;
RESULT
------
0329PM
SQL>
- 第3行:
用空格替换下划线和点translate
- 第4行:从头开始
- 第#5行:返回在最后一个字符串之前的子字符串
substr
是一个选项(如果数据总是这样,您没有说它不是这样):
- 内部
返回最后10个字符(substr
)0329PM.csv
- 外部
返回其中的前6个字符(substr
)0329PM
或者,使用正则表达式:
SQL> with test (col) as
2 (select 'Aaaaa_gggg_ne_A030_66788_Abcd_Oct_24_0329PM.csv' from dual)
3 select regexp_substr(translate(col, '_.', ' '), '\S+',
4 1,
5 regexp_count(translate(col, '_.', ' '), '\S+') - 1
6 ) result
7 from test;
RESULT
------
0329PM
SQL>
- 第3行:
用空格替换下划线和点translate
- 第4行:从头开始
- 第#5行:返回在最后一个字符串之前的子字符串
with tbl(filename) as (
Select 'Aaaaa_gggg_ne_A030_66788_Abcd_Oct_24_0329PM.csv'
from dual
)
select regexp_substr(filename, '_(\d+[AP]M)\.', 1, 1, NULL, 1)
From tbl;
实际上,要加强匹配,可以使其不区分大小写并添加扩展名:
select regexp_substr(filename, '_(\d+[AP]M)\.csv', 1, 1, 'i', 1)
From tbl;
注意:如果未找到匹配项,将返回NULL。使用这种形式的REGEXP_SUBSTR()将在一次调用中获得所需的内容。它返回第一个组,该组是最后一个下划线之后、1个或多个数字后跟A或P然后是M的文字周期之前的一组字符
with tbl(filename) as (
Select 'Aaaaa_gggg_ne_A030_66788_Abcd_Oct_24_0329PM.csv'
from dual
)
select regexp_substr(filename, '_(\d+[AP]M)\.', 1, 1, NULL, 1)
From tbl;
实际上,要加强匹配,可以使其不区分大小写并添加扩展名:
select regexp_substr(filename, '_(\d+[AP]M)\.csv', 1, 1, 'i', 1)
From tbl;
注意:如果未找到匹配项,将返回NULL