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
?我完全迷路了。