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

时间:2017-07-29 07:33:29

标签: sql 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'

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

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