0

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

Tuesday 12th March 2019 

我可以使用 split_part 删除星期二(包括“day”在内的任何内容都被删除),但这对于当月的那一天来说要困难得多。如果“th”(或“rd”或“st”)从当月的某一天开始消失,我可以将其转换为日期,但我不能完全到达那里。

任何建议都将不胜感激。

非常感谢,

巴里

4

3 回答 3

1

你能试试这个:

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

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

警告 当前不支持以下说明符:%D %U %u %V %w %X

presto sql 文档

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

date_parse(regexp_replace('Tuesday 12th March 2019','(\d+)((th|rd|nd|st) )','$1 '),'%W %d %M %Y')
于 2019-11-21T15:22:23.670 回答
1

后缀的数量是有限的,那么蛮力方法怎么样:

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

date_parse()如果支持它会简单得多%D,但显然它没有。

于 2019-11-21T15:25:29.480 回答
0

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

date(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

再次感谢您的帮助!!

于 2019-11-21T16:23:07.177 回答