错误:“ MI”的无效值详细信息:该值必须为整数

问题描述 投票:0回答:3

在PostgreSQL中,以下请求出现错误:

SELECT TO_TIMESTAMP('2020-03-07T22:34:18Z', 'YYYY-MM-DDTHH24:MI:SSZ');

产生:

错误:“ MI”的无效值“:1”,细节:值必须是整数。

为什么会在“:1”而不是之前出现错误?

sql postgresql amazon-rds-aurora sql-timestamp to-timestamp
3个回答
1
投票

[Postgres 12处理发布的查询,9.4给出了您指出的错误,因为它将DDTH解释为“以字母开头的日子”,例如1st, 2nd, 3rd, 4th,即Nth

所以..解析器将消耗07天,然后消耗接下来的两个字符并将它们扔掉(T2被扔掉),然后它将查看格式字符串中的下一个字符,即H24:-这不是任何内容都无法识别的占位符,因此它也从输入中跳过了4个字符,然后才到达它可以识别的MI,但是现在:1中的:18可以解析了。请参阅下面的评论:

SELECT TO_TIMESTAMP(
  '2020-03-07T22:34:18Z', 
-- YEARsMOsDAYNssssMI
  'YYYY-MM-DDTHH24:MI');

Key: YEAR/MO/DAYN - recognised things
     s - skipped things

要忽略T,请使用空格,而不是格式字符串中的T文字:

SELECT TO_TIMESTAMP('2020-03-07T22:34:18Z', 'YYYY-MM-DD HH24:MI:SS');

实际上,您也可以使用通常会略过的其他任何东西


1
投票

只用双引号引起来是乱抛垃圾的T

SELECT TO_TIMESTAMP('2020-03-07"T"22:34:18Z', 'YYYY-MM-DDTHH24:MI:SSZ');

Reference: Postgres formatting functions

to_dateto_numberto_timestamp中,文字文本和双引号字符串导致跳过字符串中包含的字符数。


1
投票

您的字符串格式正确,适合时间戳记,因此您可以将其转换为:

select '2020-03-07T22:34:18Z'::timestamp
© www.soinside.com 2019 - 2024. All rights reserved.