您好我将连续日期值转换为实际日期时遇到两个问题。
我已经厌倦了here来将连接值转换为to_char(DATE ...)
,但我一直在变得奇怪。我认为这是因为我的月份前面没有零填充。
这是我的基本查询:
SELECT
expiry_month,
expiry_year,
to_date(CONCAT(expiry_year, expiry_month), 'YYYY/MM'),
FROM thisTable
以下是数据输出的示例:
expiry_month expiry_year concatvalues
9 2018 20189-01-01
1 2019 20191-01-01
5 2016 20165-01-01
3 2019 20193-01-01
10 2017 201710-01-01
2 2020 20202-01-01
我想我需要LPAD()
我的月份值来解析正确的日期。例如。 01不是1,05不是5.
然而,当我尝试LPAD月份值时,它不起作用。我试过了:
lpad(to_char(expiry_month),2,'0'),
我收到此错误'提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。'
我不明白,因为lpad是一个功能。关于如何使用LPAD()
?
感谢您的建议。
我尝试使用以下代码更新to_date()
函数:
to_date(CONCAT(payment_cards.expiry_year || ' - ' || payment_cards.expiry_month || ' - 01'), 'YYYY-MM-01')
现在又抛出了一个不同的错误:
ERROR: invalid value "- " for "MM" DETAIL: Value must be an integer.
我仍然认为我需要填写月份日期?
答案 0 :(得分:1)
缺少'/'
:
SELECT
expiry_month,
expiry_year,
to_date(CONCAT(expiry_year, '/', expiry_month), 'YYYY/MM') AS the_start_of_year_month
FROM thisTable ;
将产生:
expiry_month | expiry_year | the_start_of_year_month -----------: | ----------: | :---------------------- 9 | 2018 | 2018-09-01 1 | 2019 | 2019-01-01 5 | 2016 | 2016-05-01 3 | 2019 | 2019-03-01 10 | 2017 | 2017-10-01 2 | 2020 | 2020-02-01
日期格式指定' /'并且它不存在,因此,整个文本被视为年份,月份和日期被视为1/1。 CONCAT('2018','9')
刚刚返回'20189'
(这是有效年份)。
dbfiddle here
答案 1 :(得分:0)
使用:
make_date(year int, month int, day int)
喜欢:
make_date(expiry_year, expiry_month, 1)