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

时间:2009-05-04 13:42:25

标签: sql sql-server sql-server-2005

如何在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

8 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:8)

通常,时间戳集不是well-ordered,这意味着您无法获得“最后”时间戳,其时间部分最长为分钟2009-05-06 14:58

SQL Server中,它将日期时间的一部分保留为午夜后的1/300秒分数,这个“最后”时间戳将为2009-05-06 14:58:59.997,但不保证与其他TIMESTAMP存储方法的未来版本兼容。

这意味着您需要将BETWEEN条件分为两个条件,其中一个条件为strict less,而不是下一分钟:

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

上的索引

答案 2 :(得分:6)

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

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

答案 3 :(得分:2)

我不认为有内置功能;通常做这样的事情

SET @time = '07:45'
SET @date = CONVERT(DATETIME,@time)
SELECT @date

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

答案 4 :(得分:1)

对于这种特定需求,您应该使用Quassnoi's answer所述的between方法。但是,一般问题可以用以下方法解决:

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

答案 5 :(得分:1)

一种方法是使用RIGHT()函数裁剪Date。类似的东西:

RIGHT(CONVERT(VARCHAR(8),Date, 108),5)

这仅在字符数不变时才有效,例如如果适用,有一个前导零。 (抱歉,这里没有SQL服务器来测试)。

更好的方法是使用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

答案 6 :(得分: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'

答案 7 :(得分:0)

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