如何在SQL Server中将hh:mm:ss转换为hh:mm?

15

如何在SQL Server中将hh:mm:ss转换为hh:mm?

select Count(Page) as VisitingCount,Page,CONVERT(VARCHAR(8),Date, 108) from scr_SecuristLog   
where Date between '2009-05-04 00:00:00' and '2009-05-06 14:58'  
and [user] in(select USERNAME             
    from scr_CustomerAuthorities )  
group by Page,Date order by [VisitingCount] asc
9个回答

29

CONVERT(VARCHAR(5),Date, 108)-- 获取 HH:mm


这个有文档记录吗?使用108 应该 可以得到 hh:mi:ss。使用类似于内存技巧的方法来缩短时间似乎是一种不受支持的做法,在新版本中可能会突然出现问题。 - J. Mini
108返回hh:mi:ss,但是将varchar(5)作为第一个参数传递会将结果截断为前5个字符。在SQL Server 2012+中,可以参考我的答案这里中提供的一个不错的解决方案。 - undefined

9
总的来说,时间戳集合不是良序的,这意味着您无法获得一个“最后”的时间戳,其时间部分直到分钟为2009-05-06 14:58
SQL Server中,将datetime的时间部分保留为午夜后1/300秒的分数,这个“最后”的时间戳将是2009-05-06 14:58:59.997,但不能保证与未来版本或其他TIMESTAMP存储方法兼容。
这意味着您需要将BETWEEN条件拆分成两个条件,其中一个条件是严格小于下一分钟:
select Count(Page) as VisitingCount,Page,CONVERT(VARCHAR(8),Date, 108) from scr_SecuristLog   
where Date >= '2009-05-04 00:00:00'
      AND Date < DATEADD(minute, 1, '2009-05-06 14:58')
and [user] in(select USERNAME             
    from scr_CustomerAuthorities )  
group by Page,Date order by [VisitingCount] asc

这个解决方案将有效地利用 Date 索引。


7
SELECT Convert(varchar(5), GetDate(), 108)

使用varchar(5)将自动截断日期以删除秒数。

3
我认为没有内置的函数;通常会像这样做
SET @time = '07:45'
SET @date = CONVERT(DATETIME,@time)
SELECT @date

SELECT LEFT(CONVERT(VARCHAR,@date,108),5) 

2

对于这个具体需求,您应该使用 between 方法,如Quassnoi的回答所述。然而,一般问题可以通过以下方法解决:

select dateadd(second, -datepart(second, @date), @date)

1
一种方法是使用RIGHT()函数来裁剪日期。类似这样:
RIGHT(CONVERT(VARCHAR(8),Date, 108),5)

这只有在字符数量恒定的情况下才有效,例如如果适用,则有一个前导零。(抱歉我这里没有 SQL Server 进行测试)。
更好的方法是使用 T-SQL datepart 函数进行拆分,然后重新连接日期部分,如下所示:
DARTPART("hh", CONVERT(VARCHAR(8),Date, 108))+":"+DARTPART("mi", CONVERT(VARCHAR(8),Date, 108))

参考资料:

http://msdn.microsoft.com/en-us/library/ms174420.aspx
http://msdn.microsoft.com/en-us/library/ms187928.aspx
http://msdn.microsoft.com/en-us/library/ms177532.aspx


0
SELECT CAST(CAST(GETDATE() AS Time(0)) AS VARCHAR(5))

虽然仅提供代码的答案可能解决原始问题,但如果您提供一些评论/解释您正在做什么以及为什么这样做,将有助于其他人阅读您的答案。 - Nigel Ren

0
在SQL Server 2012+中,使用format函数。 SELECT FORMAT(getdate(), 'HH:mm') as time 文档

0

从今天的日期获取 hh:mm 格式:

select getdate()

select convert(varchar(5),getdate(),108)

从表数据中的任何日期时间列获取hh:mm格式:

select date_time_column_name from table_name where column_name = 'any column data name'

select convert(varchar(5),date_time_column_name,108) from table_name
where column_name = 'any column data name'

select creationdate from employee where Name = 'Satya'

select convert(varchar(5),creationdate,108) from employee 
where Name = 'Satya'

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