【发布时间】:2017-08-03 19:13:55
【问题描述】:
您好,我在将连接的日期值转换为实际日期时遇到了两个问题。
我已经厌倦了寻找 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()有什么建议吗?
感谢您的建议。
编辑 1
我尝试使用以下代码更新 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.
我还在想我需要填写月份日期吗?
【问题讨论】:
-
你的表中
expiry_month和expiry_year的列有哪些类型?它们是整数吗?月份是表示为整数还是日期(实际月份的第一天)? -
另请注意您提供给
to_date函数的格式模式包含/,但您没有将其包含在连接值中。应该可能匹配... -
@joanolo 都是整数。
-
试试
CONCAT(expiry_year, '/', expiry_month), 'YYYY/MM')看看它是否有效。您指定了一个'/',它不在您的文本中,因此,整个文本被视为年,月和日被视为 1/1 -
@Chef1075:我已经修改了你的问题的标题,以真正关注核心需求(lpad() 实际上与你的情况没有任何关系)。
标签: postgresql date concat