Есть ли способ установить формат даты в символ, когда месяц числовой?

#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