【问题标题】:Concatenation in SQL Vertica to get year from date column?SQL Vertica中的连接以从日期列中获取年份?
【发布时间】:2021-01-27 09:25:07
【问题描述】:

我在 SQL Vertica 表中有如下列:

date_col
2020-10-15
2019-09-09
2018-09-25

我尝试做这样的事情:select TO_DATE('22-01'|| YEAR("date_col"::varchar(4)),'DD-MM-YYYY') from table

以便得到如下结果:

2020-01-22
2019-01-22
2018-01-22

尽管如此,当我尝试我的代码时,我得到了不好的结果,例如:

3570-03-02 等等...

也许你知道比我的代码更好的解决方案来实现我的需要?

【问题讨论】:

    标签: sql date concatenation vertica


    【解决方案1】:

    不要连接。它不可读且占用大量资源。

    您似乎想获得同年 1 月 22 日或输入日期。

    然后,使用其他日期函数:

    • TRUNC(<date>) 将日期截断为年份,在本例中为 1 月 1 日
    • TIMESTAMPADD(),回溯到日期,增加 22-1 天。
    WITH
    -- your input ...
    indata(dt) AS (
                SELECT DATE '2020-10-15'
      UNION ALL SELECT DATE '2019-09-09'
      UNION ALL SELECT DATE '2018-09-25'
    )
    SELECT
      dt
    , TIMESTAMPADD(DAY,22-1,TRUNC(dt,'YEAR'))::DATE AS convdt
    FROM indata;
    -- out      dt     |   convdt   
    -- out ------------+------------
    -- out  2020-10-15 | 2020-01-22
    -- out  2019-09-09 | 2019-01-22
    -- out  2018-09-25 | 2018-01-22
    

    【讨论】:

      【解决方案2】:

      我建议截断到一年中的第一天,然后添加一定的天数:

      select date_trunc('year', date_col) + interval '21 day'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 2022-08-19
        • 2012-11-07
        • 2021-07-09
        相关资源
        最近更新 更多