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

RegEx matching a valid date Presto

对于下面的 table,我想从 additional_info 字符串中提取 available from date 。我知道 Presto 中有一个 regexp_extract_all(string, pattern) 函数,但不太确定如何从字符串中提取日期。

仅供参考:

table

product_id   additional_info
325245       New, contact for more information, available from 01.01.2020
635255       Used, available from 06.11.2020
422632        New, contact for more information

想要output_table

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

它将 return 与您的捕获组匹配的第一个子字符串 (betweenbrackets)

正则表达式中的点表示任何字符。要在正则表达式中逐字匹配点,您需要用反斜杠屏蔽它 \.

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

如果要允许不同的分隔符,而不仅仅是点,请使用字符 class []。例如,点或破折号:

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