当月份是数字时,有没有办法将日期格式设置为字符?
Is there a way to set a date format to a character when month is numeric?
我有 2 列,例如 Year:2010
和 Month: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')
您也可以使用 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
我有 2 列,例如 Year:2010
和 Month: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')
您也可以使用 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