select to_date('20170202','YYYYMMDD');
返回:
2017-02-02
但是当我这样做时:
select to_date('20172202','YYYYMMDD');
输出是:
2018-10-04
当月份错误时,为什么不像Oracle中那样返回错误?
答案 0 :(得分:1)
我认为这是导致错误的原因:
to_timestamp和to_date用于处理无法通过简单转换转换的输入格式。这些函数可以自由地解释输入,只需最少的错误检查。虽然它们产生有效输出,但转换可能会产生意外结果。例如,对这些功能的输入不受正常范围的限制,因此to_date(' 20096040',#YYYYMMDD')返回2014-01-17而不是导致错误。 Casting没有这种行为。
https://www.postgresql.org/docs/9.6/static/functions-formatting.html
答案 1 :(得分:1)
YYYYMMDD
必须YYYYDDMM
个月不能大于12。
答案 2 :(得分:0)
我得到了我想要的答案/ 我使用 to_char 代替 to_date ,我将fisrt参数投射到日期..
select to_char(DATE '20162202,'YYYYMMDD') into datResult ;
所以我现在可能有错误..
感谢大家的帮助
答案 3 :(得分:0)
现在此命令引发错误(此问题已在PostgreSQL 10中修复):
postgres=# select to_date('20172202','YYYYMMDD');
ERROR: date/time field value out of range: "20172202"