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



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

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

产生:

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

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

Postgres 12在发布时处理您的查询,9.4给出了您所说的错误,因为它将DDTH解释为"后面有字母的一天",如1st, 2nd, 3rd, 4th,即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');

事实上,你可以使用几乎所有其他通常会被跳过的东西

只需用双引号将垃圾T括起来:

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

参考:Postgres格式化函数

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

字符串的时间戳格式很好,因此您可以将其转换为:

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

最新更新