monetdb - MonetDB中是否有类似于DateDiff的函数可以计算两个日期之间的周数
问题描述
考虑两个日期,“2011 年 1 月 1 日”和“2011 年 10 月 1 日”。我希望计算这些日期之间的周数。
我尝试了以下方法:
select extract ( week from ( (current_date+ interval '5' day) - current_date ));
- 它返回错误“没有这样的一元运算符'week(day_interval)'”
我可以使用以下方法找到天数:
select extract ( day from ( (current_date+ interval '5' day) - current_date ));
- 上面的行返回输出
有什么办法可以达到同样的效果吗?
此外,MonetDB 考虑从星期一到星期日(1-7)的一周。有什么办法可以将其更新/定制为周日至周六。
谢谢。
解决方案
我能想到几种可能性:
select date '2011-10-01' - date '2011-01-01';
产生一个 INTERVAL DAY 值,实际上以秒的差异表示,即 23587200.000。这可以除以 (7 24 60*60),即一周中的秒数。但它仍然是 INTERVAL 类型,而不是 INTEGER。
另一种方法是首先将日期转换为整数:自“纪元”(1970 年 1 月 1 日)以来的秒数:
select epoch_ms(date '2011-10-01');
这实际上给出了自纪元以来的毫秒数,因此额外增加了 1000 倍。
然后你可以操纵这个结果来得到你想要的:
select (epoch_ms(date '2021-02-02') - epoch_ms(date '2020-12-31')) / (7*24*60*60*1000);
这会产生一个 HUGEINT 值(如果您的系统中有 128 位整数,即使用 GCC 或 CLANG 编译的任何内容),因此您可以将其转换为 INTEGER:
select cast((epoch_ms(date '2011-10-01') - epoch_ms(date '2011-01-01')) / (7*24*60*60*1000) as integer);
推荐阅读
- ios - 适用于 iOS 的 React Native:一个 URL 而不是其他 URL 的“网络请求失败”
- css - 如何使用 react-bootstrap 自定义复选框样式?
- php - 查询示例 - 对 sql 注入是否安全?
- python - BaggingClassifier 中的 MLPClassifier
- javascript - Browser blocking Mathjax on app engine static page
- c - 为什么写入连续在缓冲区中留下 4K 字节?
- reactjs - Reactjs,类组件到钩子
- swift - 测试动态按钮视图
- jquery - 从 daterangepicker 中禁用或删除 mintues 下拉菜单
- .net - 通过依赖注入使用 Blazor Webassembly 进行 gRPC-Web 通道身份验证