我的 pgsql 查询有问题,它抛出“错误:整数超出范围”。
我想要完成的是检查日期包含的 valid_to 字段('timestamp without timezone' 类型)是否与当前日期完全不同(N * 间隔)。在查询失败的示例中,我使用“7776000”作为间隔(90 天),“1399327200”作为 unix 时间的当前日期。
什么有效:
SELECT
*,
(CAST((EXTRACT(EPOCH FROM et.valid_to) - 1399327200 ) as integer) % 7776000) as modulo
FROM example_table et
WHERE et.valid_to IS NOT NULL
什么不是:
WITH table_refined as (
SELECT
*,
(CAST((EXTRACT(EPOCH FROM et.valid_to) - 1399327200 ) as integer) % 7776000) as modulo
FROM example_table et
WHERE et.valid_to IS NOT NULL
)
SELECT * from table_refined WHERE modulo=0
也不是这个:
SELECT * FROM (
SELECT
*,
(CAST((EXTRACT(EPOCH FROM et.valid_to) - 1399327200 ) as integer) % 7776000) as modulo
FROM example_table et
WHERE et.valid_to IS NOT NULL
)
AS table_temp
WHERE table_temp.modulo = 0
因为我首先从时间戳中减去当前日期,所以转换为整数的值不应超出整数范围。当然有一些 NULL,但由于第一个查询通过 OK,所以这不是问题。
最佳答案
我想我找到了原因 - 在记录中有一个带有“valid_to”字段和“2050-01-01”日期的记录,而那条记录肯定引起了所有这些大惊小怪。因此,我添加了
AND valid_to < '2100-01-01'
我的查询是什么让它最终起作用了。尽管 unix 时间将在 2038 年达到整数限制,但看起来 postgresql 转换使其达到无符号整数最大值,因此将记录限制为 2100 年有效。
关于sql - 将时间戳转换为整数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23534900/