下面的查询返回日期中某个小时的 MINUTE。
例如,如果日期值 ='2017-07-19 05:50:00.000',它将返回50
。
我的问题是我需要在指定日期获取 MINUTE,而不是表中存在的所有日期。
查询:
SELECT
DATEPART(MINUTE, ClockOut)
FROM
[dbo].[Attendance]
WHERE
DATEPART(HOUR, ClockOut) = '5'
我尝试仅在'2017-07-19'
中返回分钟数的查询,它没有返回任何记录。
SELECT
DATEPART(MINUTE, ClockOut)
FROM
[dbo].[Attendance]
WHERE
DATEPART(HOUR, ClockOut) = '5' AND ClockOut = '2017-07-19'
示例数据
下班打卡
2017-07-19 05:50:00.000
2017-07-20 05:51:00.000
2017-07-21 05:52:00.000
我只需要在这个日期返回第 5 小时的分钟'2017-07-19'
您正在比较日期时间和日期,这就是为什么它没有返回您想要的结果。
SELECT DATEPART(MINUTE, ClockOut)
FROM [dbo].[Attendance]
WHERE DATEPART(HOUR, ClockOut) = '5'
AND CAST(ClockOut AS DATE) = '2017-07-19';
如果你使用ClockOut='2017-07-19',就像写'2017-07-19 0:00:00'一样。尝试使用 DataPart (yyyy, Clockout(=2017 和 DataPary (MM, Clockout(=7 和 DataPart (dd, Clockout(=19
DateTime
(2017-07-19 12:03:42(,因此它的值永远不会完全等于日期 (2017-07-19(。请改用范围,以便查询计划可以在打卡时使用潜在索引。如果行数很大,强制转换为 Date 或使用DatePart
可以排除这种情况,从而导致更长的执行时间。
SELECT DATEPART(MINUTE, ClockOut)
FROM [dbo].[Attendance]
WHERE DATEPART(HOUR, ClockOut) = 5
AND ClockOut BETWEEN '2017-07-19'
AND '2017-07-20' -- start of next day
工作演示