正则表达式匹配有效日期 Presto
RegEx matching a valid date Presto
对于下面的 table,我想从 additional_info
字符串中提取 available from date
。我知道 Presto 中有一个 regexp_extract_all(string, pattern) 函数,但不太确定如何从字符串中提取日期。
仅供参考:
- 日期总是采用相同的格式
additional_info
栏中只能有一个日期
additional_info
列中没有日期的行在日期列中有空
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
对于下面的 table,我想从 additional_info
字符串中提取 available from date
。我知道 Presto 中有一个 regexp_extract_all(string, pattern) 函数,但不太确定如何从字符串中提取日期。
仅供参考:
- 日期总是采用相同的格式
additional_info
栏中只能有一个日期additional_info
列中没有日期的行在日期列中有空
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