使用此日期格式:mm/dd/yyyy h:m AM/PM
(示例:06/05/2014 5:00 PM
),我如何忽略实际日期并获取特定时间之间的数据计数?(如5 pm-9pm)
我尝试过这样的东西,但当然它没有工作,我不确定SQL是否可以这样做:
SELECT COUNT(id) FROM mobile_statistics WHERE timestamp BETWEEN '5:00 PM' AND '9:00 PM';
备注:时间戳字段类型为nvarchar(MAX)
将日期时间转换为time
:
SELECT COUNT(id)
FROM mobile_statistics
WHERE CAST(timestamp AS time) BETWEEN '5:00 PM' AND '9:00 PM';
如前所述,只需使用convert()
将字符串转换为time
数据类型。然后,您可以使用判别函数对桶中的东西进行计数。就像
select within_business_hours = sum(case when convert(time,timestamp)) between '17:00' and '21:00' then 1 else 0 end ) ,
outside_business_hours = sum(case when convert(time,timestamp)) not between '17:00' and '21:00' then 1 else 0 end ) ,
null_values = sum(case when timestamp is null then 1 else 0 end ) ,
from dbo.mobile_statistics ms
应该给你
- 在工作时间内具有时间戳的行数
- 时间戳在营业时间以外的行数
null
时间戳的行数它们的和应该匹配行的总数