使用 INTERVAL 查询日期范围

Using INTERVAL for querying date range

我们使用 clickhouse 作为我们的数据库,并且有一个 table 的列类型为 DateTime(UTC).

我需要查询日期范围,例如:

SELECT * 
FROM some_table 
WHERE date_time_column BETWEEN ? AND ?

我有 StartEnd 类型的参数 time.Time 但客户要求额外的选项:

基本上,他们想提供 Start 和一个偏移量。偏移量可以是天、小时、周或月。

由于我是新员工,之前从未与clickhouse合作过,所以我来这里寻求帮助。

我解决问题的努力:

我调查了 clickhouse 文档并找到 INTERVAL

它看起来很适合我的任务,因为我有这样的想法:

SELECT * 
FROM some_table 
WHERE date_time_column  BETWEEN ? AND ? + INTERVAL ? MONTH + INTERVAL ? WEEK + INTERVAL ? DAY + INTERVAL ? HOUR

这样我就可以对不需要的参数使用零,例如:

问题:

除了clickhouse数据库,我们使用Golang和sqlx库与clickhouse进行通信。

对我来说,你的决定看起来不错。

我会通过计算 Stop-date 在 sql-script:

之外来稍微简化一下
import (
    "time"
)

Start := ..
Stop := Start.AddDate(0, months, days + weeks*7).Add(time.Hour * time.Duration(hours))
SELECT *
FROM some_table
WHERE date_time_column BETWEEN ? AND ?

这种方式看起来更易于维护(不需要 CH SQL 的知识)和可测试性(从单元测试的角度来看)。