ERROR: invalid value for "MI" Detail: Value must be an integer
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');
产生了:
ERROR: invalid value ":1" for "MI" Detail: Value must be an integer.
为什么会在“:1”而不是之前出现错误?
就在文字 T
周围,用双引号引起来:
SELECT TO_TIMESTAMP('2020-03-07"T"22:34:18Z', 'YYYY-MM-DDTHH24:MI:SSZ');
Reference: Postgres formatting functions:
In to_date
, to_number
, and to_timestamp
, literal text and double-quoted strings result in skipping the number of characters contained in the string.
Postgres 12 与您发布的查询一起使用,9.4 会给出您陈述的错误,因为它将 DDTH
解释为 "day with letters after" 就像 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 ,请在格式字符串中使用 space,而不是 T
文字:
SELECT TO_TIMESTAMP('2020-03-07T22:34:18Z', 'YYYY-MM-DD HH24:MI:SS');
实际上,您几乎可以使用通常也会被跳过的任何其他内容
您的字符串格式适合时间戳,因此您可以直接转换它:
select '2020-03-07T22:34:18Z'::timestamp
在 PostgreSQL 中,我收到以下请求的错误:
SELECT TO_TIMESTAMP('2020-03-07T22:34:18Z', 'YYYY-MM-DDTHH24:MI:SSZ');
产生了:
ERROR: invalid value ":1" for "MI" Detail: Value must be an integer.
为什么会在“:1”而不是之前出现错误?
就在文字 T
周围,用双引号引起来:
SELECT TO_TIMESTAMP('2020-03-07"T"22:34:18Z', 'YYYY-MM-DDTHH24:MI:SSZ');
Reference: Postgres formatting functions:
In
to_date
,to_number
, andto_timestamp
, literal text and double-quoted strings result in skipping the number of characters contained in the string.
Postgres 12 与您发布的查询一起使用,9.4 会给出您陈述的错误,因为它将 DDTH
解释为 "day with letters after" 就像 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 ,请在格式字符串中使用 space,而不是 T
文字:
SELECT TO_TIMESTAMP('2020-03-07T22:34:18Z', 'YYYY-MM-DD HH24:MI:SS');
实际上,您几乎可以使用通常也会被跳过的任何其他内容
您的字符串格式适合时间戳,因此您可以直接转换它:
select '2020-03-07T22:34:18Z'::timestamp