【问题标题】:RegEx matching a valid date PrestoRegEx 匹配有效日期 Presto
【发布时间】:2021-06-09 10:55:32
【问题描述】:

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

仅供参考:

  • 日期始终采用相同格式
  • additional_info 列中只能有一个日期
  • additional_info 列中没有日期的行在日期列中为空

表格

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

所需的输出表

product_id     available_date 
325245         01.01.2020
635255         06.11.2020
422632

【问题讨论】:

  • (1) additional_info 看起来像一个字符串,而不是一个数组。 (2) 日期是否总是相同的格式? (3) 如果有多个日期或没有日期怎么办?
  • 我已经编辑了我的帖子。日期始终采用相同的格式,如果只有一个日期或没有日期,则日期 col 为空

标签: sql regex date presto trino


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 2019-04-27
      • 2011-08-29
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多