gpt4 book ai didi

python - SELECT 语句中从 "24:00:00"到 "00:00:00"的 PostgreSQL 时间转换/格式化

转载 作者:行者123 更新时间:2023-11-28 21:17:08 27 4
gpt4 key购买 nike

我有一些带有时间字段的市场数据存储在 PostgreSQL 数据库中。 PostgreSQL 使用格式“00:00:00”到“24:00:00”来存储时间(请参阅 http://www.postgresql.org/docs/9.1/static/datatype-datetime.html),只要我只在数据库中工作,它就可以完美地工作。

问题是之后我必须进行一些数据处理(使用 Python),而 Python datetime.time 格式只支持从“00:00:00”到“23:00”的时间:00”。因此,如果我使用 psycopg2 模块获取包含“24:00:00”的记录,我会收到错误消息 “ValueError: hour must be in 0..23” 因为时间字段无法正确转换。

我的一个干净的解决方法是将 SELECT 语句中已经包含“24:00:00”小时的时间字段转换为“00:00:00”。这将解决问题,因为转换器功能之后不会失败。

我已经查看了格式化函数(参见 http://www.postgresql.org/docs/9.4/static/functions-formatting.html )但找不到合适的..

有没有办法使用 SQL 实现这一点?

提前致谢!

最佳答案

'24:00:00'::time 的问题显然是一个 psycopg2 错误。当我们等待 Daniele 或我修复它(如果可能的话)时,这里有一个解决方法:只需使用 CASE 表达式来检查导致错误的特定值。如果您的表名为 tab 并且 time 列为 t 那么您可以:

SELECT CASE t WHEN '24:00:00'::time THEN '0:00:00'::time ELSE t END FROM tab;

一切都应该有效。

请注意,只有在提取 time 列时才会出现问题。 PostgreSQL 似乎将 timestamp 列(甚至代表闰秒的列)转换为相应的午夜,即 2012-6-30T24:00:00(2012 年 6 月 30 日闰秒second) 结果为 2012-7-1T00:00:00

关于python - SELECT 语句中从 "24:00:00"到 "00:00:00"的 PostgreSQL 时间转换/格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27919727/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com