我正在使用 Redash 中的以下 SQL 查询,该查询从表中检索每月数据。
SELECT *
FROM Table
WHERE
"Date" between '2021-04-01T00:00:00.669976+00:00' and '2021-04-30T23:59:59.669976+00:00'
我想知道是否有一种解决方法可以WHERE
有效地更新子句,而不是在每个月底手动输入。
这对我来说效果很好:
WHERE
EXTRACT(MONTH FROM "Date") = EXTRACT(MONTH FROM CURRENT_DATE) AND EXTRACT(YEAR FROM "Date") = EXTRACT(YEAR FROM CURRENT_DATE)
在您的情况下,我建议您避免使用任何涉及对该字段进行convert
或其他类型转换的解决方案GRP_Date
。通过这样做,如果字段有索引,则不允许 SQL Server 能够使用索引GRP_Date
,这会以非常明显的方式影响您的性能。
由于您的问题中已经提到的原因,在这种特定情况下当然between
不理想。
我建议以下条件以获得最佳性能(良好使用索引)并避免时间问题
where GRP.GRP_date >= @since
and GRP.GRP_date < dateadd(day, 1, @until) -- @until + 1 day
在以下情况下:
@since = 2016-11-01
@直到 = 2016-11-14
where GRP.GRP_Fecha >= '2016-11-01'
and GRP.GRP_Fecha < '2016-11-15'
之前订购日期时2016-11-15
,这包括所有日期,2016-11-14
与时间无关。