postgresql – 间隔数据类型的月,日,秒表示之间的不一致
我理解为什么
postgresql使用月,日和秒字段来表示sql interval数据类型.如果涉及夏令时调整,一个月的长度并不总是相同,一天可以有23,24或25小时.这是来自postgresql文档.
但我当时不明白为什么不会因此而在几个月和几天都处理这个问题.请参阅以下查询,该查询计算精确的间隔,其中两个时间点之间的秒数可以精确计算: select ('2017-01-01'::timestamp-'2016-01-01'::timestamp); -->366 days. postgresql选择在几天内给出结果.不是几个月而不是几秒钟. 但为什么结果是天而不是秒?它没有定义天数(它们可以是23,24或25小时).那他为什么不在几秒钟内输出? 那么由于月份的长度也没有定义,为什么postgresql不输出12个月而不是366天呢? 他并不关心天数的长短没有定义,但显然他关心的是月份的长度没有定义. 为什么这种不对称? 有关进一步说明,请参阅此查询: select ('10 days'::interval-'24 hours'::interval); --> 10 days -24:00:00 你看到postgresql正确拒绝回答9天.他非常清楚日常和小时无法互换的问题.但话又说明为什么第一个查询会返回几天? 解决方法
我无法回答你的问题,但我想我可以指出你正确的方向.我认为SQL-99完成,真的是理解SQL间隔的最容易获得的来源.它可以在线获得:
https://mariadb.com/kb/en/sql-99/08-temporal-values/.
SQL标准描述了两种间隔:年 – 月间隔和日 – 时间间隔.这样做是为了防止月份和日期部分出现在同一时间间隔内,因为正如您所知,一个月中的天数不明确. “3”个月间隔的天数取决于您所谈论的三个月. 我认为这是编写第一个查询的详细的标准SQL方法. select cast(timestamp '2017-01-01' - timestamp '2016-01-01' as interval day to hour) as new_column; new_column interval day to hour -- 366 days 我怀疑你会发现SQL标准有一些规则来规定SQL dbms应该做什么,因为省略了间隔时间到一天的时间. PostgreSQL可能会也可能不会遵循这些规则.
标准SQL可防止月份和日期部分出现在同一时间间隔内.此外,有效秒数范围为0到59. select interval '59' second; interval interval second -- 00:00:59 select interval '60' second; interval interval second -- 00:01:00 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |