繁体   English   中英

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

[英]ERROR: invalid value for "MI" Detail: Value must be an integer

在 PostgreSQL 中,我收到以下请求的错误:

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

这产生了:

错误:“MI”的无效值“:1”详细信息:值必须是整数。

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

只需用双引号将文字T括起来:

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

参考:Postgres 格式化函数

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

Postgres 12 可以处理您发布的查询,9.4 给出了您声明​​的错误,因为它将DDTH解释为“后面有字母的日期”,例如1st, 2nd, 3rd, 4th ie Nth

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

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');

实际上,您几乎可以使用通常也会跳过的任何其他内容

您的字符串已针对时间戳进行了良好格式化,因此您只需将其转换即可:

select '2020-03-07T22:34:18Z'::timestamp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM