【发布时间】:2021-07-05 11:43:41
【问题描述】:
我们使用 clickhouse 作为我们的数据库,并且有一个列类型为 DateTime(UTC) 的表。
我需要查询日期范围,例如:
SELECT *
FROM some_table
WHERE date_time_column BETWEEN ? AND ?
我有 Start 和 End 类型的参数 time.Time 但客户要求提供其他选项:
基本上,他们想提供Start 和偏移量。偏移量可以是天、小时、周或月。
由于我是新员工,之前从未在 Clickhouse 工作过,所以我来这里寻求帮助。
我为解决问题所做的努力:
我调查了 clickhouse 文档并找到了INTERVAL。
它看起来很适合我的任务,因为我有这样的想法:
SELECT *
FROM some_table
WHERE date_time_column BETWEEN ? AND ? + INTERVAL ? MONTH + INTERVAL ? WEEK + INTERVAL ? DAY + INTERVAL ? HOUR
这样我可以将零用于我不需要的参数,例如:
-
如果我们需要 3 个小时,我们会得到类似这样的伪代码:
sqlx.db.Query(SELECT * FROM some_table WHERE date_time_column BETWEEN ? AND ? + INTERVAL ? MONTH + INTERVAL ? WEEK + INTERVAL ? DAY + INTERVAL ? HOUR, Start, Start, 0, 0, 0, 3) -
如果我们需要 3 小时 2 天,我们会在伪代码中得到类似这样的内容:
sqlx.db.Query(SELECT * FROM some_table WHERE date_time_column BETWEEN ? AND ? + INTERVAL ? MONTH + INTERVAL ? WEEK + INTERVAL ? DAY + INTERVAL ? HOUR, Start, Start, 0, 0, 2, 3)
问题:
- 我的想法是否高于可行的解决方案?
- 如果不是,您能告诉我如何实现上述要求吗?
除了 clickhouse 数据库,我们使用 Golang 和 sqlx 库与 clickhouse 进行通信。
【问题讨论】:
标签: sql go clickhouse sqlx