首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从不同格式的字符串中提取数据

如何从不同格式的字符串中提取数据
EN

Stack Overflow用户
提问于 2022-01-27 11:05:01
回答 1查看 103关注 0票数 1

嗨,iam试图从字符串中提取日期,当日期格式从mm/dd/yyyy变为mm/dd/yy时,使用regex function.How动态提取日期。下面的regexp适用于mm/dd/yyyy format.What,如果我的字符串具有这两种格式,并且我想动态提取日期。

string1 = '2021航班5航班附件:在7/25/2021和8/7/2021之间交付功能良好。

string1 =‘2021年航班5附件夹具:在7/25/21和8/7/21之间交付,如何在这两种情况下提取两个日期。

代码语言:javascript
复制
regexp_extract(string1, '^.*(\\d{1,2}/\\d{1,2}/\\d{4}).*(\\d{1,2}/\\d{1,2}/\\d{4})',1) date1,
regexp_extract(string1, '^.*(\\d{1,2}/\\d{1,2}/\\d{4}).*(\\d{1,2}/\\d{1,2}/\\d{4})',2) date2
EN

回答 1

Stack Overflow用户

发布于 2022-01-27 12:59:08

用CASE表达式检查不同的格式并进行相应的解析。两位数年份是一种糟糕的做法,但是如果您已经有了这样的数据,那么就没有什么可做的了,这是解析不同格式的常用方法-- CASE表达式:

演示:

代码语言:javascript
复制
with mytable as (

select '2021 Flight 5 Accessory Fixtures: DELIVER BETWEEN 7/25/2021 and 8/7/2021' string1 union all
select '2021 Flight 5 Accessory Fixtures: DELIVER BETWEEN 7/25/21 and 8/7/21'
)

select case when string1 rlike '(?i)BETWEEN (\\d{1,2}/\\d{1,2}/\\d{4})'
            then date(from_unixtime (unix_timestamp(regexp_extract(string1, '(?i)BETWEEN (\\d{1,2}/\\d{1,2}/\\d{4})',1),'MM/dd/yyyy')
                       ))
            
            when string1 rlike '(?i)BETWEEN \\d{1,2}/\\d{1,2}/\\d{2} '
            then date(from_unixtime (unix_timestamp(regexp_extract(string1, '(?i)BETWEEN (\\d{1,2}/\\d{1,2}/\\d{2})',1),'MM/dd/yy')
                       ))
        end date1,
        case when string1 rlike '(?i)AND (\\d{1,2}/\\d{1,2}/\\d{4})'
            then date(from_unixtime (unix_timestamp(regexp_extract(string1, '(?i)AND (\\d{1,2}/\\d{1,2}/\\d{4})',1),'MM/dd/yyyy')
                       ))
            
            when string1 rlike '(?i)AND \\d{1,2}/\\d{1,2}/\\d{2}'
            then date(from_unixtime (unix_timestamp(regexp_extract(string1, '(?i)AND (\\d{1,2}/\\d{1,2}/\\d{2})',1),'MM/dd/yy')
                       ))
        end date2
from mytable

结果:

代码语言:javascript
复制
date1       date2   
2021-07-25  2021-08-07
2021-07-25  2021-08-07

对于两位数年份,unix_timestamp函数将猜测缺失数字: 7/25/21被解析为2021-07-25,7/25/98被解析为1998-07-25。这种猜测可能有错误,@PanagiotisKanavos在评论中提到了这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70877491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档