以下查询返回日期某小时的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'
答案 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
答案 2 :(得分:0)
如果你使用ClockOut ='2017-07-19'就像写'2017-07-19 0:00:00'。尝试使用DataPart(yyyy,Clockout)= 2017和DataPary(MM,Clockout)= 7和DataPart(dd,Clockout)= 19