在MonetDB中,如何将日期作为整数?

时间:2014-05-22 15:31:49

标签: sql date integer representation monetdb

我希望能够做一些像

这样的事情
SELECT cast(my_date_col AS int) FROM my_table;

我想得到MonetDB内部使用的整数,即你在查看BAT结构并在MonetDB的GDK代码中获得相应元素时找到的值。现在,AFAICT,这个内部价值是自大纪元以来的天数,即1年1月的第0年和第34年。 (所以1月3日第2年将是366 + 365 + 2 = 732)。

我实际可以管理的最好的是

SELECT my_date_col AS int - cast('1-1-1' AS date) - 366 FROM my_table;

由于MonetDB不会接受"年零"日期。这是一个丑陋的黑客,我想做得更好。帮帮我?

1 个答案:

答案 0 :(得分:1)

如果您尝试获取“my_date_col”和1970-01-01之间的天数,则在标准SQL中,您只需从另一个中减去一个。您的平台monetdb似乎支持这种语法,但我没有安装它。我在PostgreSQL中写了这些例子。

select current_date - date '1970-01-01' as num_days;
num_days
--
16213

通过将16213天添加到当前日期(2014-05-23)来检查结果。

select cast ((date '1970-01-01' + interval '16213' day) as date) as target_date
target_date
--
2014-05-23

强制转换是必要的,因为此添加的结果是时间戳,而不是日期。

在您的情况下,您需要列名而不是“current_date”。所以你正在寻找这些方面的东西。

select my_date_col - date '1970-01-01' as num_days
from your-table-name;