我有一列时间戳,我只想计算当前日期的某些小时之间该列的行数。数据的日期格式为 五月2,2019 2:18下午。我需要查询12:30 PM到1:30 PM之间的数据,我无法弄清楚如何同时提取时间戳的小时和分钟,因此它仅返回当天当天时间之间的行。
我的列名是Outfeed_Place_Time,我试图查看该列在DATEPART HOUR GETDATE和DATEPART MINUTE GET DATE之间,但是它不起作用。
SELECT
COUNT(Outfeed_Place_Time) AS Parts_Hour_Parts
FROM PartData_GKN05_H
WHERE
Outfeed_Place_Time BETWEEN ((DATEPART(HOUR, GETDATE()) = 12) AND (DATEPART(MINUTE, GETDATE()) = 30)) AND ((DATEPART(HOUR, GETDATE()) = 1) AND (DATEPART(MINUTE, GETDATE()) = 30))
我希望获得时间戳为12:30到1:30的所有行的计数,但是出现错误“'='附近的语法不正确”
答案 0 :(得分:0)
我希望您实际上将日期存储为datetime,而不要使用“格式”来表示varchar数据。
假设您将其存储为日期,则可以按照以下步骤进行操作。请注意,您必须先将日期转换为日期,然后再转换为日期时间,因为无法将分钟添加到日期数据类型。我也更喜欢将大于和小于分开,而不是在之间使用。之间可能真的很难看,尤其是在日期之间。 https://sqlblog.org/2011/10/19/what-do-between-and-the-devil-have-in-common
where Outfeed_Place_Time > dateadd(minute, 750, convert(datetime, convert(date, Outfeed_Place_Time))) --midnight plus 750 minutes is 12:30 pm
AND Outfeed_Place_Time < dateadd(minute, 810, convert(datetime, convert(date, Outfeed_Place_Time))) --midnight plus 810 minutes is 1:30 pm
-编辑-
要仅获取当天的行,只需更改dateadd逻辑即可。
where Outfeed_Place_Time > dateadd(minute, 750, convert(datetime, convert(date, getdate()))) --midnight plus 750 minutes is 12:30 pm
AND Outfeed_Place_Time < dateadd(minute, 810, convert(datetime, convert(date, getdate()))) --midnight plus 810 minutes is 1:30 pm