【问题标题】:How can i extract Dates from a string field in Hive using RegEx function如何使用 RegEx 函数从 Hive 中的字符串字段中提取日期
【发布时间】:2021-11-29 22:30:42
【问题描述】:
'2021 july (JNS) Accessory Fixtures: DELIVER BETWEEN 7/26/2021 and 8/6/2021'

预期结果:

Date1 : 7/26/2021
Date2 : 8/6/2021

【问题讨论】:

    标签: sql date hive substring hiveql


    【解决方案1】:

    例如这样:

    select regexp_extract(str, '(?i)BETWEEN (\\d{1,2}/\\d{1,2}/\\d{4})',1) as date1,
           regexp_extract(str, '(?i)AND (\\d{1,2}/\\d{1,2}/\\d{4})$',1) as date2
    

    如果您需要将日期转换为正确的格式(yyyy-MM-dd),请使用 split 获取数组中的所有日期元素,使用 lpad 添加零并连接:

    with mydata as (
    select '2021 july (JNS) Accessory Fixtures: DELIVER BETWEEN 7/26/2021 and 8/6/2021' str
    )
    select concat(date1[2],'-',lpad(date1[0],2,0),'-',lpad(date1[1],2,0)) as date1,
           concat(date2[2],'-',lpad(date2[0],2,0),'-',lpad(date2[1],2,0)) as date2
    from
    (
    select split(date1,'/') date1, split(date2,'/') date2 --arrays
      from
        (select regexp_extract(str, '(?i)BETWEEN (\\d{1,2}/\\d{1,2}/\\d{4})',1) as date1,
                regexp_extract(str, '(?i)AND (\\d{1,2}/\\d{1,2}/\\d{4})$',1) as date2
           from mydata
        ) s 
    )s
    

    结果:

    date1       date2
    2021-07-26  2021-08-06
    

    如果有没有 BETWEEN 和 AND 的字符串,并且您想从字符串的开头提取第一个和第二个日期,请使用:

    select regexp_extract(str, '^.*(\\d{1,2}/\\d{1,2}/\\d{4}).*(\\d{1,2}/\\d{1,2}/\\d{4})',1) as date1,
           regexp_extract(str, '^.*(\\d{1,2}/\\d{1,2}/\\d{4}).*(\\d{1,2}/\\d{1,2}/\\d{4})',2) as date2
    

    您可以通过在第二组后添加 * 来使第二个日期可选,即使字符串中不存在第二个日期,也会提取第一个日期:

    select regexp_extract(str, '^.*(\\d{1,2}/\\d{1,2}/\\d{4}).*(\\d{1,2}/\\d{1,2}/\\d{4})*',1) as date1,
           regexp_extract(str, '^.*(\\d{1,2}/\\d{1,2}/\\d{4}).*(\\d{1,2}/\\d{1,2}/\\d{4})',2) as date2
    

    【讨论】:

    • 有效。如果我在其他字符串列中没有 BETWEEN 和 AND,这怎么可能是动态的
    • @JayaprakashNeela 已添加到答案中
    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 2020-06-10
    • 2014-09-23
    • 2014-06-24
    相关资源
    最近更新 更多