SQL TO_TIMESTAMP() 使用日期时间格式时出现错误 2207

SQL Error 2207 on TO_TIMESTAMP() using datetime format

在 Postgres 中,我试图在我的 WHERE 谓词中执行基于 date/time 的查询。

当我尝试使用这种 date/time 格式 select 时 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');

错误:"HH" 的值“:1”无效 详细信息:值必须是整数。 SQL 状态:22007

问题是由于使用了 HH 之前的 ''T'',DB 表示您可能会使用

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

相反。

您正在尝试使用包含 T 的日期值,看起来您正试图向 TO_TIMESTAMP 声明 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 这不是一个整数。

本题:

Postgres- have to_timestamp() ignore/not read a specific character in middle of date/time string

意味着你可以把 space 放在 T 所在的格式中,或者只是将你必须的字符串转换为时间戳 - postgres 显然可以将该字符串解析为时间戳,而无需从字面上放置明确格式化

尝试:

SELECT *
FROM history
WHERE create_time > TIMESTAMP '2018-10-08T23:17:44.728'

SELECT *
FROM history
WHERE create_time > cast('2018-10-08T23:17:44.728' as timestamp)

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

您甚至可能会发现这个有效:

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

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