SQL Server:查询以获取特定日期的分钟日期



下面的查询返回日期中某个小时的 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

您的 ClockOut 列包含一个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

工作演示

最新更新