将“2018 年 10 月 19 日”转换为 Presto/SQL 中的日期

convert '19th October 2018' into date in Presto/SQL

我有一列从电子邮件内容中提取的字符串。字符串的格式为:-

Tuesday 12th March 2019 

我可以使用 split_part 删除星期二(删除 'day' 之前的任何内容) 但对于每月的日期部分来说,这要困难得多。如果 'th'(或 'rd' 或 'st')从该月的某天开始消失,我可以将其转换为日期,但我无法完全到达那里。

非常感谢任何建议。

非常感谢,

巴里

你能试试这个吗:

date_parse('Tuesday 12th March 2019','%W %D %M %Y')

取决于 prestosql 文档是否是最新的,这可能不起作用,因为据说:

Warning The following specifiers are not currently supported: %D %U %u %V %w %X

presto sql doc

编辑:除了戈登的回答,您还可以尝试使用:

date_parse(regexp_replace('Tuesday 12th March 2019','(\d+)((th|rd|nd|st) )',' '),'%W %d %M %Y')

后缀的数量是有限的,那么暴力方法如何:

date_parse(replace(replace(replace(replace(substr(str, position(' ' in str) + 1
                                          ), 'st', ''
                                  ), 'nd', ''
                          ), 'rd', ''
                  ), 'th'),
           '%d %M %Y'
          )

如果date_parse()支持%D就简单多了,但显然不支持

对于任何感兴趣的人,我听取了上述两位用户的建议,这些建议帮助我找到了解决方案。最后一段代码如下所示:-

日期(date_parse(trim(regexp_replace(split_part(split_part(split_part(my_data,split_here ,2),'split_here_2,1),split_here_3,2),'(\d+)((th|rd|nd|st) )','$1')) ,'%e %M %Y'))

返回:-

2018-11-04

2019-04-06

2018-11-02

2019-09-19

2019-07-12

2018-11-04

2018-09-29

2018-10-19

2018-11-02

再次感谢您的帮助!!