使用datetime格式对_TIMESTAMP()执行SQL错误2207

使用datetime格式对_TIMESTAMP()执行SQL错误2207,sql,postgresql,datetime-format,Sql,Postgresql,Datetime Format,在Postgres中,我试图在WHERE谓词中执行基于日期/时间的查询 当我尝试使用此日期/时间格式进行选择时,SQL错误表示该值必须为整数。我不知道为什么它不认为我的17分钟不是整数,或者为什么它只把它看作1而不是17 SELECT * FROM history WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728','yyyy-MM-dd''T''HH:mm:ss.SSS'); 错误:无效值:1表示“HH” 详细信息:值必

在Postgres中,我试图在WHERE谓词中执行基于日期/时间的查询

当我尝试使用此日期/时间格式进行选择时,SQL错误表示该值必须为整数。我不知道为什么它不认为我的17分钟不是整数,或者为什么它只把它看作1而不是17

SELECT *
FROM history
WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728','yyyy-MM-dd''T''HH:mm:ss.SSS');
错误:无效值:1表示“HH” 详细信息:值必须是整数。
SQL状态:22007

问题是由于使用了
'T'
,它在
HH
之前,并且使用了DB信号

TO_时间戳('2018-10-08 23:17:44.728','yyyy-mm-dd HH24:MI:SS.MS')


相反。

您试图使用一个包含T的日期值,看起来您试图向\u时间戳声明T是一个要忽略的文本值。问题是,您这样做是通过放置
'T'
(撇号-T-撇号,转义)来实现的,它将解析器插入3个字符,然后在23:17时遇到“:1”,而它预期为HH:

--your date, and underneath it, the format you gave
2018-10-08T23:17:44.728
yyyy-MM-dd'T'HH:mm:ss.SSS
你能看到HH是如何(垂直)与1对齐的吗?Postgres抱怨说,它需要一个可以解析为23的整数,但它遇到了字符串:1,它不是整数

这个问题:

意味着您可以在T所在的格式中放置一个空格,或者直接将字符串转换为时间戳-postgres显然可以将该字符串解析为时间戳,而无需显式地为其设置格式

尝试:

你甚至可能会发现这是可行的:

SELECT *
FROM history
WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728', 'yyyy MM dd HH mm ss SSS')

数字与格式字段对齐,空格用于您想要忽略的所有其他内容(连字符、冒号、圆点等)

我不认为这是一个打字错误,我认为这是一个错误的期望,即日期值中的t也应该这样使用,但要求我删除约会中的“T”,并略晚于Caius Jard的answer@Jason好的,很高兴听到。顺便说一句,我是第一个回答者,但不是问题,重要的是要有一个更好的答案(这是他的答案)。第一个时间戳为“2018-10-08T23:17:44.728”的答案有效。
SELECT *
FROM history
WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728', 'yyyy MM dd HH mm ss SSS')