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),但我想将 HOUR 和 MINUTE 一起显示,用“:”分隔,这样的 '12:00' 它可以是一个字符串,不用担心。

我怎样才能做到这一点?

提前致谢!

4

4 回答 4

17

您可以将CONVERT与样式 114(部分Date and Time Styles)一起使用:

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

或者,从 SQL Server 2012 开始,您可以使用FORMAT ( demo ):

SELECT FORMAT(GETDATE() , 'hh:mm');
于 2013-05-23T21:07:30.130 回答
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)

Click here to see it in action at SQL Fiddle

于 2013-05-23T21:06:56.627 回答
1

对于一些微不足道的事情来说,这一切都非常复杂。你为什么不简单地尝试:

left(convert(varchar,current_timestamp,108),5)

它将 datetime 值转换为 24 小时制的小时和分钟的字符串表示形式,因此例如下午 2:37 的时间将转换为字符串 value 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)
于 2013-05-23T21:47:30.933 回答
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 个字符
于 2013-05-23T21:03:26.863 回答