1

我希望能够做类似的事情

SELECT cast(my_date_col AS int) FROM my_table;

我想获得 MonetDB 内部使用的整数,即如果您查看 BAT 结构并在 MonetDB 的 GDK 中的代码中获得适当的元素,您会找到的值。现在,AFAICT,这个内部值是自纪元以来的天数,即“第 0 年”的 1 月 1 日(因此第 2 年的 1 月 3 日将是 366+365+2 = 732)。

我实际上能做到的最好的是

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

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

4

1 回答 1

1

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

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

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

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

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

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

select my_date_col - date '1970-01-01' as num_days
from your-table-name;
于 2014-05-23T06:49:11.193 回答