如何在Sql Server中连接日期部分

4

我希望能得到数据库大神的帮助。

我有以下代码片段:

SELECT DATEPART(hh, BeginMinute) AS Intervalo, SUM(Qtde) AS Total
  FROM tr_CustomerCount
WHERE BeginMinute > '5/22/2013 00:00:00 AM' AND BeginMinute < '6/22/2013 12:00:00 AM'
GROUP BY DATEPART(hh, BeginMinute)

实际上它只返回小时(HH),但我想显示小时和分钟,用“ :”隔开,比如“12:00”,可以是一个字符串,不用担心。

我该怎么做?

提前感谢!


1
你已经有了 DATEPART(hh, BeginMinute) 来获取小时数,你看过 DATEPART 可以接受的不同参数了吗? - LittleBobbyTables - Au Revoir
好的,但我不知道如何将它分组!我只需要一个成员,明白吗?格式为hh:mm。因为我无法插入另一个参数,比如“分钟”。它只允许一个或两个参数。 - felipekm
4个回答

17

您可以使用样式为114的CONVERT(“日期和时间样式”部分):

SELECT CONVERT(VARCHAR(5), GETDATE(), 114);

或者,从SQL Server 2012开始,您可以使用FORMAT函数 (演示):

SELECT FORMAT(GETDATE() , 'hh:mm');

1
最优雅的方法是...我在SQL fiddle上调试了这里 :) - davmos
1
你想四舍五入还是直接截去分钟?例如对于 15:36,结果应该是 15:00 还是 16:00 - Bogdan Sahlean
15:00 实际上我只需要小时,分钟需要为00。谢谢! :) - felipekm
1
@FelipeKM:如果你只需要小时数(不需要四舍五入),那么使用表达式 right('0'+dateName(hour,BeginMinute),2)+':00'。请参见我修改后的答案。 - Nicholas Carey
1
SQL2012:SELECT FORMAT(GETDATE(),'hh:\0\0') AS Sol3 - Bogdan Sahlean
显示剩余2条评论

1

例子:

DECLARE @theDate DATETIME
SET @theDate = CURRENT_TIMESTAMP

SELECT @theDate 
PRINT (RIGHT('00' + convert(varchar(2), DATEPART(hour, @theDate)), 2) +
    ':' + RIGHT('00' + convert(varchar(2), DATEPART(minute, @theDate)), 2))

说明:

  • DATEPART() 返回一个数字值,因此每次调用都需要转换为文本/字符串类型(varchar)
  • T-SQL 中的字符串连接只需使用 'string 1' + 'string 2'
  • 要填充前导零,请将您的值与 2 个前导零连接起来,然后调用 RIGHT() 函数从组合字符串中返回最右边的 2 个字符

它运行良好,添加GROUP BY DATEPART(hour, @theDate), DATEPART(minute, @theDate)。非常感谢! - felipekm

1
SELECT RIGHT('00' + rtrim(cast(DATEPART(hh, BeginMinute) as varchar)), 2) + ':' + 
       RIGHT('00' + rtrim(cast(DATEPART(mi, BeginMinute) as varchar)), 2) AS Intervalo, 
       SUM(Qtde) AS Total
FROM tr_CustomerCount
WHERE BeginMinute > '5/22/2013 00:00:00 AM' 
AND BeginMinute < '6/22/2013 12:00:00 AM'
GROUP BY DATEPART(hh, BeginMinute), DATEPART(mi, BeginMinute)

点击此处在SQL Fiddle中查看它的运行情况


1
这对于一些琐碎的事情来说变得非常复杂。为什么不尝试简单地进行以下操作:
left(convert(varchar,current_timestamp,108),5)

该函数将日期时间值转换为24小时制的小时和分钟的字符串表示形式,因此例如下午2:37的时间将被转换为字符串值14:37。一旦您完成这个步骤,那么...
select time_hhmm = left(convert(varchar,BeginMinute,108),5) , 
       total     = sum(Qtde)
from tr_CustomerCount
where BeginMinute > '5/22/2013 00:00:00 AM'
  and BeginMinute < '6/22/2013 12:00:00 AM'
group by left(convert(varchar,BeginMinute,108),5)

非常容易阅读。

根据OP的评论,修改为仅显示每小时的HH:00:

select time_hhmm = right( '0'+datename(hour,BeginMinute) , 2 ) + ':00 , 
       total     = sum(Qtde)
from tr_CustomerCount
where BeginMinute > '5/22/2013 00:00:00 AM'
  and BeginMinute < '6/22/2013 12:00:00 AM'
group by datename(hour,BeginMinute)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接