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

SQL Server:查询以获取特定日期中的日期分钟数,sql,sql-server,Sql,Sql Server,下面的查询返回日期某个小时的分钟数 例如,如果日期值='2017-07-19 05:50:00.000',它将返回50 我的问题是我需要在指定的日期获得分钟,而不是表中存在的所有日期 查询: SELECT DATEPART(MINUTE, ClockOut) FROM [dbo].[Attendance] WHERE DATEPART(HOUR, ClockOut) = '5' 我试图在'2017-07-19'中仅返回分钟数的查询,但未返回任何记录 SELECT

下面的查询返回日期某个小时的分钟数

例如,如果日期值='2017-07-19 05:50:00.000',它将返回
50

我的问题是我需要在指定的日期获得分钟,而不是表中存在的所有日期

查询:

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'

您的计时列包含
日期时间(2017-07-19 12:03:42),因此它的值永远不会精确等于日期(2017-07-19)。改为使用范围,以便查询计划可以在发条时使用潜在索引。强制转换为日期或使用
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

如果使用ClockOut='2017-07-19',就像写'2017-07-19 0:00:00'。尝试使用DataPart(yyyy,Clockout)=2017和DataPary(MM,Clockout)=7以及DataPart(dd,Clockout)=19

您将日期时间与日期进行比较,这就是它没有返回所需结果的原因

SELECT  DATEPART(MINUTE, ClockOut)
FROM    [dbo].[Attendance]
WHERE   DATEPART(HOUR, ClockOut) = '5'
        AND CAST(ClockOut AS DATE) = '2017-07-19';

你能提供一个样本数据吗?我刚刚添加了数据