SQL Vertica 中的串联以从日期列中获取年份?

Concatenation in SQL Vertica to get year from date column?

我在 SQL Vertica table 中有专栏,如下所示:

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等等...

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

不要串联。它不可读且占用资源。

你好像是想得到当年的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

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

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