首页 > 解决方案 > SQL RegEx:如何从此字符串中提取日期

问题描述

如何使用 RegEx 从该字符串中提取2018.11.06

“NL-SAS-US-2018.11.06.Nov 6 2018 - SL 电子邮件 - 美国时事通讯”

字符可以以各种方式和长度更改,但在字符串中的某个点总会有一个格式为 YYYY.MM.DD 的日期

桌子:
在此处输入图像描述

这是我目前的解决方案,但我认为有更好的方法吗?

SELECT *, 
REGEXP_EXTRACT(email_name, '([0-9]+)') AS email_name
FROM
    (SELECT REPLACE(email_name, ".", "") AS email_name
    FROM emailsTable)

这给了我“20181106”

谢谢

标签: sqlregexgoogle-bigquery

解决方案


下面是 BigQuery 标准 SQL 的示例

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'NL-SAS-US-2018.11.06.Nov 6 2018 - SL Email - US Newsletter' email_name
)
SELECT REGEXP_EXTRACT(email_name, r'([12]\d{3}.(?:0[1-9]|1[0-2]).(?:0[1-9]|[12]\d|3[01]))') email_date
FROM `project.dataset.table`

结果

Row email_date   
1   2018.11.06   

推荐阅读