【问题标题】:Extracting and aggregating Hour from DateTime and Formatting the hour with AM/PM从 DateTime 中提取和聚合小时并使用 AM/PM 格式化小时
【发布时间】:2014-10-04 03:56:42
【问题描述】:

我有一个包含 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

我需要输出看起来像下面的格式: 注:每小时访问是一个小时范围内访问的客户总数。所以 3 客户 在下午 1 点访问过,在下午 2 点访问过 3 个。

HourlyVisit Arrival
3           1:00 PM
3           2:00 PM

我尝试了这段代码,我得到了小时数,它是汇总的,但我需要将小时数转换成更易读的格式。

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

【问题讨论】:

  • 你想要的输出是什么?
  • @AdamWenger:我已将其添加到问题中,它被标记为;之后。

标签: sql-server tsql


【解决方案1】:

试试这个:

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 ');

【讨论】:

  • Kevin:我在下午 12 点到达 0:00。
  • @Unaverage_Guy 你是对的...编辑了我的答案,如果效果更好,请告诉我。
  • Kevin:我是这样修改的:WITH CTE AS ( SELECT CustomerCount = COUNT(*), ArrivalHour = STUFF(RIGHT(CONVERT(VARCHAR(20), Arrival, 100), 7), 4, 2, '00 ') FROM MySchema.MyTable GROUP BY Arrival ) SELECT NumberOfVisit = SUM(CustomerCount), ArrivalHour FROM CTE GROUP BY ArrivalHour
【解决方案2】:

假设它们是日期时间,您应该能够获取小时,并使用 datepart 进行分组。

GROUP BY DATEPART(hh, Arrival)

【讨论】:

    【解决方案3】:
    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
    

    我认为这应该适合你,但你可能应该尝试在客户端进行这种类型的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 2010-11-20
      • 2021-08-15
      • 1970-01-01
      相关资源
      最近更新 更多