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 用于您要忽略的所有其他内容(连字符、冒号、点等)
在 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 用于您要忽略的所有其他内容(连字符、冒号、点等)