sql - 数组中存在于其他两列之间的所有日期的计数
问题描述
我的 JSON 看起来像这样
{"array":["2021-01-17","2021-01-25"], "beginDate": "2021-01-01", "endDate": "2021-01-20"}
我想查找和array
之间存在的所有日期的计数。beginDate
endDate
我试图在开始日期和结束日期之间创建一系列日期并执行array_intersect
. 与此类似:
select size(array_intersect(array("2021-12-02","2021-12-05","2021-12-10"),(sequence(to_date("2021-12-01"), date_add(to_date("2021-12-06"),-1), interval 1 day))))
但我得到:
array_intersect 应该是两个具有相同元素类型的数组,但它是 [array<string>, array<date>]
当我在我的 JSON 上运行它时。
所以我相信我需要将我的数组转换为array<date>
. 有什么建议么?
解决方案
您需要确保两个数组都是array<date>
. 在您的示例中,第一个数组是array<string>
,当您将它与 相交时会导致错误array<date>
。
select
size(
array_intersect(
transform(array("2021-12-02","2021-12-05","2021-12-10"), x -> date(x)),
sequence(to_date("2021-12-01"), date_add(to_date("2021-12-06"), -1), interval 1 day)
)
)
;
此查询给出2
.
对于您最初的问题,您可以尝试以下查询:
select
size(
array_intersect(
transform(array, x -> date(x)),
sequence(to_date(begin), date_add(to_date(end), -1), interval 1 day)
)
)
;
推荐阅读
- ios - Vaadin TextField 仅默认为 iOS 上的数字键盘
- jquery - accordion with floating content - height problem
- javascript - 有没有办法在不捆绑的情况下为 Node 和浏览器使用相同的 es6 模块导入路径?
- android - Android OpenCV 将 ROI 复制到较大图像的一部分
- macos - 在 macOS Mojave 上创建屏幕截图而不会丢失区域
- include - 如何通过 Sequelize 中包含模型的计算属性进行排序
- python - 如何从python中的xml文件中读取字典中的xml内容?
- java - JavaFX - 更改颜色后,TextField 提示文本不会在焦点时被删除
- vba - 从今天下载 .csv 附件
- c++ - c ++ while循环计时器的准确性变化很大