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'
我在 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'