我有一个 Java 应用程序,它使用这种方法将时间写入 DB 中的字段( time ): 数据库中的字段具有bigint类型 我使用这个查询来显示时间: 结果似乎有 3 小时的差异。 正确的时间是 7:00,但显示为 4:00 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
在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');
错误:“ 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个字符,然后在期望HH时从23:17遇到“:1”:
--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-具有to_timestamp()忽略/不读取日期/时间字符串中间的特定字符
意味着您可以在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')
数字与格式字段对齐,空格用于其他所有您要忽略的内容(连字符,冒号,点等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.