Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Sql 与有效日期Presto匹配的正则表达式_Sql_Regex_Date_Presto_Trino - Fatal编程技术网

Sql 与有效日期Presto匹配的正则表达式

Sql 与有效日期Presto匹配的正则表达式,sql,regex,date,presto,trino,Sql,Regex,Date,Presto,Trino,对于下表,我想从附加信息字符串中提取可用自日期。我知道Presto中有一个regexp\u extract\u all(string,pattern)函数,但不太确定如何从字符串中提取日期 供参考: 日期总是采用相同的格式 “附加信息”列中只能有一个日期 附加信息列中没有日期的行在日期列中为空 桌子 期望输出表 product_id available_date 325245 01.01.2020 635255 06.11.2020 422632

对于下表,我想从
附加信息
字符串中提取
可用自日期
。我知道Presto中有一个regexp\u extract\u all(string,pattern)函数,但不太确定如何从字符串中提取日期

供参考:

  • 日期总是采用相同的格式
  • “附加信息”列中只能有一个日期
  • 附加信息
    列中没有日期的行在日期列中为空
桌子

期望输出表

product_id     available_date 
325245         01.01.2020
635255         06.11.2020
422632

如果您的日期总是采用这种格式,那么一个非常简单的解决方案可能是:

SELECT
   product_id
   , regexp_extract(additional_info, '(\d\d.\d\d.\d\d\d\d)')
FROM table

它将返回与您的捕获组匹配的第一个子字符串
(在rackets之间)

regexp中的点表示任何字符。要在regexp中逐字匹配点,需要使用反斜杠将其屏蔽。

SELECT
     product_id,
     regexp_extract(additional_info, '(\d\d\.\d\d\.\d{4})')
FROM table
如果要允许使用不同的分隔符,而不仅仅是点,请使用字符类
[]
。例如,点或破折号:

SELECT
     product_id,
     regexp_extract(additional_info, '(\d\d[.-]\d\d[.-]\d{4})')
FROM table

(1)
附加信息
看起来像字符串,而不是数组。(2) 日期是否总是采用相同的格式?(3) 如果有多个日期或没有日期怎么办?我已经编辑了我的帖子。日期始终采用相同的格式,如果只有一个日期或没有日期,则日期列为空
SELECT
     product_id,
     regexp_extract(additional_info, '(\d\d[.-]\d\d[.-]\d{4})')
FROM table