Sql server 从DateTime提取和聚合小时,并使用AM/PM格式化小时
我有一个包含Datetime2的列,需要提取、聚合和格式化小时,使其具有AM/PM 下表显示了每天工作时间内的客户访问: 我需要对小时进行分组,以便聚合下午1点范围内的所有时间 处理前:Sql server 从DateTime提取和聚合小时,并使用AM/PM格式化小时,sql-server,tsql,Sql Server,Tsql,我有一个包含Datetime2的列,需要提取、聚合和格式化小时,使其具有AM/PM 下表显示了每天工作时间内的客户访问: 我需要对小时进行分组,以便聚合下午1点范围内的所有时间 处理前: CustomerID Arrival 1 1:15 PM 2 1:20 PM 3 1:30 PM 4 2:00 PM 5 2:05 PM 6 2:13 PM 我需要输出如下格式: 注:每小
CustomerID Arrival
1 1:15 PM
2 1:20 PM
3 1:30 PM
4 2:00 PM
5 2:05 PM
6 2:13 PM
我需要输出如下格式:
注:每小时访问量是一小时范围内的总客户访问量。So 3客户
下午1点参观,下午2点参观3次
我尝试了这段代码,我得到了小时数,它是聚合的,但我需要把小时数转换成更可读的格式
WITH CTE AS
(
SELECT CustomerID = COUNT(CustomerID),
HourlyFrequency = DATENAME(HOUR, Arrival)
FROM MySchema.MyTable
GROUP BY Arrival
)
SELECT HourlyVisit = SUM(CustomerID), HourlyFrequency
FROM CTE
GROUP BY HourlyFrequency
试试这个:
SELECT CustomerCount = COUNT(*)
, ArrivalHour = STUFF(RIGHT(CONVERT(VARCHAR(20), Arrival, 100), 7), 4, 2, '00 ')
FROM MySchema.MyTable
GROUP BY STUFF(RIGHT(CONVERT(VARCHAR(20), Arrival, 100), 7), 4, 2, '00 ');
假设它们是日期时间,您应该能够抓取时间,并使用分组
我认为这应该对你有用,但你可能应该尝试在客户端进行这种操作。你想要的输出是什么?@AdamWenger:我已经在问题中添加了这一点,它被标记为;之后。凯文:我将在下午12点到下午0点。@unserage\u Guy你说得对。。。编辑我的答案,让我知道它是否更好。凯文:我这样修改它:CTE为SELECT CustomerCount=COUNT*,ArrivalHour=STUFFRIGHTCONVERTVARCHAR20,Arrival,100,7,4,2,'00'来自MySchema。MyTable GROUP BY Arrival选择NumberOfVisite=SUMCustomerCount,ArrivalHour来自CTE GROUP BY ArrivalHour
SELECT CustomerCount = COUNT(*)
, ArrivalHour = STUFF(RIGHT(CONVERT(VARCHAR(20), Arrival, 100), 7), 4, 2, '00 ')
FROM MySchema.MyTable
GROUP BY STUFF(RIGHT(CONVERT(VARCHAR(20), Arrival, 100), 7), 4, 2, '00 ');
GROUP BY DATEPART(hh, Arrival)
WITH CTE AS
(
SELECT CustomerID = COUNT(CustomerID),
HourlyFrequency = DATENAME(HOUR, Arrival)
FROM MySchema.MyTable
GROUP BY Arrival
)
SELECT CustomerID = SUM(CustomerID), RIGHT(CONVERT(CHAR(20), DATEADD(hour,CAST(HourlyFrequency AS INT),0), 22), 11)
FROM CTE
GROUP BY HourlyFrequency