Sql 当月份是数字时,有没有办法将日期格式设置为字符?

Sql 当月份是数字时,有没有办法将日期格式设置为字符?,sql,vertica,Sql,Vertica,我有两列,比如年份:2010和月份:3,并希望从这些列创建一个日期 我找到了以下方法: SELECT TO_DATE(concat('2010',concat('3','01')), 'YYYYMMDD') 它现在可以正常工作了,因为它给出了2012-06-04,但是当我键入'03'时,它开始给出正确的答案。如何更改YYYYMMDD中的MM部分以使代码正常工作?我建议使用算术构造值,然后转换为字符串和日期: select to_date( (year * 10000 + month * 100

我有两列,比如年份:
2010
和月份:
3
,并希望从这些列创建一个日期 我找到了以下方法:

SELECT TO_DATE(concat('2010',concat('3','01')), 'YYYYMMDD')

它现在可以正常工作了,因为它给出了
2012-06-04
,但是当我键入
'03'
时,它开始给出正确的答案。如何更改
YYYYMMDD
中的
MM
部分以使代码正常工作?

我建议使用算术构造值,然后转换为字符串和日期:

select to_date( (year * 10000 + month * 100 + 1)::varchar, 'YYYYMMDD')

我可能建议使用算术构造值,然后转换为字符串和日期:

select to_date( (year * 10000 + month * 100 + 1)::varchar, 'YYYYMMDD')

您还可以使用
添加月份()
,在您的情况下:

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

您还可以使用
添加月份()
,在您的情况下:

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

这个表达式怎么可能给出
2012-06-04
?我完全迷路了。那个表达式怎么可能给出
2012-06-04
?我完全迷路了。