我有一个带有 return 错误日期的 between 子句的查询
I have a query with a between clause that is return wrong days
我正在开发一个 scholl 项目,我必须 return 来自数据库的一些数据(比如在查询中)并过滤 2 个日期之间的数据,所以我执行下面的查询。
Select L_AccessPoint.ap_id, ap_name, COUNT(*) AS NumeroAcessos, year,month,day
FROM L_AccessPoint INNER JOIN F_Presence ON L_AccessPoint.ap_id = F_Presence.ap_id
WHERE convert(varchar(10),F_Presence.ts, 120) between '2022-03-01' and '2022-03-02'
Group by L_AccessPoint.ap_id, ap_name, year,month,day
order by L_AccessPoint.ap_id ASC, year DESC,month DESC,day DESC
但是当我以 yyyy-mm-dd 2022-02-28,2022-03-01,2022-03-02 格式执行 return 天的查询时。
像那样:
tableF_Presence结构是:
ts 列是日期时间。
tableL_AcessPoint结构是:
如何在这两个日期之间进行筛选?
我该如何解决我的问题?
抱歉所有试图提供帮助的人,但问题出在我的数据库上,ts 与月份和日期不对应,如您所见:
我会非常感谢所有帮助过我的人。
让我们分解一下:
WHERE convert(varchar(10),F_Presence.ts, 120)
between '2022-03-01' and '2022-03-02'
- 将列转换为字符串意味着您将永远、永远、永远无法利用该列的索引,无论它是否存在。
- 出于多种原因,使用
BETWEEN
对于日期范围来说是可怕的。
- 使用像
YYYY-MM-DD
这样的格式是不安全的,因为在很多情况下它会被误解为 YYYY-DD-MM
。
中的所有这些以及更多内容
查询的工作方式如下:
WHERE F_Presence.ts >= '20220301'
AND F_Presence.ts < '20220303'
我正在开发一个 scholl 项目,我必须 return 来自数据库的一些数据(比如在查询中)并过滤 2 个日期之间的数据,所以我执行下面的查询。
Select L_AccessPoint.ap_id, ap_name, COUNT(*) AS NumeroAcessos, year,month,day
FROM L_AccessPoint INNER JOIN F_Presence ON L_AccessPoint.ap_id = F_Presence.ap_id
WHERE convert(varchar(10),F_Presence.ts, 120) between '2022-03-01' and '2022-03-02'
Group by L_AccessPoint.ap_id, ap_name, year,month,day
order by L_AccessPoint.ap_id ASC, year DESC,month DESC,day DESC
但是当我以 yyyy-mm-dd 2022-02-28,2022-03-01,2022-03-02 格式执行 return 天的查询时。
像那样:
tableF_Presence结构是:
ts 列是日期时间。
tableL_AcessPoint结构是:
如何在这两个日期之间进行筛选?
我该如何解决我的问题?
抱歉所有试图提供帮助的人,但问题出在我的数据库上,ts 与月份和日期不对应,如您所见:
我会非常感谢所有帮助过我的人。
让我们分解一下:
WHERE convert(varchar(10),F_Presence.ts, 120)
between '2022-03-01' and '2022-03-02'
- 将列转换为字符串意味着您将永远、永远、永远无法利用该列的索引,无论它是否存在。
- 出于多种原因,使用
BETWEEN
对于日期范围来说是可怕的。 - 使用像
YYYY-MM-DD
这样的格式是不安全的,因为在很多情况下它会被误解为YYYY-DD-MM
。
查询的工作方式如下:
WHERE F_Presence.ts >= '20220301'
AND F_Presence.ts < '20220303'