#sql #vertica
Вопрос:
У меня есть 2 столбца, скажем, Год: 2010
и месяц: 3
и я хочу создать дату из них в столбцы, которые я нашел следующим образом:
SELECT TO_DATE(concat('2010',concat('3','01')), 'YYYYMMDD')
Теперь он работает правильно , как и дает 2012-06-04
, но когда я печатаю '03'
, он начинает давать правильный ответ. Как я должен изменить MM
часть, YYYYMMDD
чтобы код работал правильно?
Комментарии:
1. Как могло такое выражение дать
2012-06-04
? Я совершенно потерялся.
Ответ №1:
Я мог бы предложить использовать арифметику для построения значения, а затем преобразовать его в строку и в дату:
select to_date( (year * 10000 month * 100 1)::varchar, 'YYYYMMDD')
Ответ №2:
Вы также можете работать с ADD_MONTHS()
, в вашем случае:
WITH
indata(yr,mth) AS (
SELECT 2010, 3
UNION ALL SELECT 2021, 6
)
SELECT
ADD_MONTHS('0001-01-01',(yr-1)*12 mth-1) AS resulting_date
, yr
, mth
FROM indata;
-- out resulting_date | yr | mth
-- out ---------------- ------ -----
-- out 2010-03-01 | 2010 | 3
-- out 2021-06-01 | 2021 | 6