【问题标题】:In MonetDB, how can I get the date as an integer?在 MonetDB 中,如何获取整数形式的日期?
【发布时间】:2014-07-11 17:59:54
【问题描述】:

我希望能够做类似的事情

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 不接受“零年”日期。这是一个相当丑陋的黑客,我想做得更好。帮帮我?

【问题讨论】:

  • 我在monetdb docs 中没有看到任何表明它支持纪元数据类型的内容。你有参考吗?
  • @MikeSherrill'CatRecall':我不确定你的意思。 Epoch(在此上下文中)是您计算时间或日期的时间点,作为 usecs 或 msecs 或天或诸如此类的偏移量。在传统的 UNIX 系统上,纪元是 1970 年 1 月 1 日。
  • "Epoch" 本质上是一个整数。日期本质上不是整数,并且不能在标准 SQL 中转换为整数。您是否只是想获取从 1970-01-01 到 my_date_col 的天数?
  • @MikeSherrill'CatRecall':(已编辑)嗯,是的,有点,但不是 1970-01-01,而是 MonetDB 内部使用的任何东西。我相信是 1 月 1 日,“第 0 年”。

标签: sql date integer representation monetdb


【解决方案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;

【讨论】:

  • @einpoklum:也许你应该编辑你的问题,并添加这些细节。我查看了源代码,但没有看到任何相关内容。 (这并不意味着很多。)
  • @einpoklum:我的意思是在你的问题中包含足够的细节,以便我们可以看到看到的内容。 (我之前没有说清楚。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
相关资源
最近更新 更多