2017-07-29 113 views
1

以下查询返回某个日期的某个小时的MINUTE。SQL Server:查询在特定日期获取日期的分钟数

例如,如果日期值='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'

+0

您能否提供样本数据? –

+0

我刚刚添加了数据 – Ayman

回答

1

您正在比较datetime到日期,这就是为什么它没有返回您想要的结果。

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

你CLOCKOUT列包含DateTime(2017-07- 19 12:03:42)所以它的价值永远不会等同于一个日期(2017-07-19)。请使用范围,以便查询计划可以使用Clockout上的潜在索引。投射到日期或使用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 

working demo

0

如果使用CLOCKOUT = '2017年7月19日' 这就像写 '2017年7月19日0:00:00'。尝试使用DataPart(yyyy,Clockout)= 2017和DataPary(MM,Clockout)= 7和DataPart(dd,Clockout)= 19