如何将nvarchar转换为时间,而不是日期时间?

时间:2009-05-08 08:33:25

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

DECLARE @DateNow smalldatetime
SET @DateNow='12:30'
select @DateNow
-------------------------------------OR--------------------------------------
select CAST( '12:30' as datetime )


<小时/>

结果:1​​900-01-01 12:30:00.000(我不想要这个)


但我需要时间格式的结果而不是字符串而不是日期时间?

结果:1​​2:30(我想要这个)

4 个答案:

答案 0 :(得分:9)

与José说的一样,您可以使用CONVERT将日期时间显示为日期。 MSDN列出了所有possible formats。例如,格式8是hh:mi:ss:

 select convert(varchar(32),getdate(),8)
 12:51:21

现在,您可以通过指定较少的字符来减少秒数:

 select convert(varchar(5),getdate(),8)
 12:51

另一种经常使用的格式是121,yyyy-mm-dd hh:mi:ss.mmm(24h):

 select convert(varchar(32),getdate(),121)
 2009-05-08 12:51:21.987

你可以选择时间部分:

 select substring(convert(varchar(32),getdate(),121),12,5)
 12:51

或者组合字符串技巧:

 select right(convert(varchar(16),getdate(),121),5)
 12:51

右?没错!

答案 1 :(得分:7)

SQL Server 2008中有TIME类型,但在以前的版本中,您可以将其表示为varchar以供显示。

这是您可以使用所需格式检索DATETIME字段的时间部分的方法。

DECLARE @DateNow smalldatetime
SET @DateNow = GETDATE() -- 2009-05-08 12:58:02.680

SELECT CONVERT(CHAR(5), @DateNow, 8) 
-- this returns the time portion as 12:58

答案 2 :(得分:1)

您可以使用CONVERT功能。

顺便说一下,SQL Server中没有“TIME”数据类型。因此,转换后的结果将始终为STRING。

编辑:SQL Server版本< SQL Server 2008中没有“TIME”数据类型。

答案 3 :(得分:0)

如果您需要比较,添加和/或减去时间(仅)值,请考虑使用INT存储“TIME”值然后将其转换为CHAR的可能性显示结果。