我希望能够做一些像
这样的事情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不会接受"年零"日期。这是一个丑陋的黑客,我想做得更好。帮帮我?
答案 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;