PostgreSQL中非常大的间隔

PostgreSQL中非常大的间隔,sql,postgresql,Sql,Postgresql,我正在尝试使用这样一段代码 立即选择()+间隔“50000000000s” 这是一个问题,因为时间间隔的秒数太大。根据PostgreSQL在线文档,interval是一个16字节的数字,但只有在实际用作表中的列时才会出现这种情况 我尝试对两个时间戳求和,但两个时间戳上根本不存在运算符+(-) 是否有任何其他方法可以将非常大的间隔(或秒数)添加到现有的时间戳中(存储在表中或now()) PS:转换为UNIX时间戳、添加秒数并转换回PostgreSQL的时间戳可能会起作用,但我正在寻找更直接的解决方

我正在尝试使用这样一段代码

立即选择()+间隔“50000000000s”

这是一个问题,因为时间间隔的秒数太大。根据PostgreSQL在线文档,interval是一个16字节的数字,但只有在实际用作表中的列时才会出现这种情况

我尝试对两个时间戳求和,但两个时间戳上根本不存在运算符
+
-

是否有任何其他方法可以将非常大的间隔(或秒数)添加到现有的时间戳中(存储在表中或
now()


PS:转换为UNIX时间戳、添加秒数并转换回PostgreSQL的时间戳可能会起作用,但我正在寻找更直接的解决方案。

间隔确实是16字节长,但内部表示很困难(好吧,所有与日期和时间有关的内容都是…)。引用手册:

select now() + 50000000000 * interval '1 second';
           ?column?           
------------------------------
 3599-03-23 12:07:44.43808+00
内部间隔值存储为月、日和秒。之所以这样做是因为一个月的天数不同,如果涉及夏令时调整,一天可以有23或25个小时。月份和天数字段是整数,而秒字段可以存储分数。由于间隔通常是由常量字符串或时间戳减法创建的,因此这种存储方法在大多数情况下都能很好地工作。函数justify_days和justify_hours可用于调整超出其正常范围的天数和小时数

因此,在您的例子中,溢出的是“秒”字段,即使间隔本身完全能够处理500亿秒,正如Clodoaldo正确指出的:

SELECT INTERVAL '1 second' * 50000000000;
请注意,间隔是浮点值,因此距离2000年越远,精度就会越差



作为旁注:时间戳没有
+
操作符,因为它们和温度一样有意义:绝对没有。“3月20日13:40+4月4日15:33”应该是什么意思?另一方面,两个时间戳之间的差异定义明确:一个间隔。

这非常有效,谢谢。我会在一段时间内接受它,看看是否有其他人会回答另一个解决方案。