Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在oracle中与Am或pm一起提取日期_Regex_Oracle_Regexp Substr - Fatal编程技术网

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
是一个选项(如果数据总是这样;您没有说不是这样):

  • 内部
    substr
    返回最后10个字符(
    0329PM.csv
  • 外部
    substr
    返回其中的前6个字符(
    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行:返回在最后一个字符串之前的子字符串

Nested
substr
是一个选项(如果数据总是这样,您没有说它不是这样):

  • 内部
    substr
    返回最后10个字符(
    0329PM.csv
  • 外部
    substr
    返回其中的前6个字符(
    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行:返回在最后一个字符串之前的子字符串

使用这种形式的REGEXP\u 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。

使用这种形式的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