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

Pen*_*uen 1 sql sql-server sql-server-2005

DECLARE @DateNow smalldatetime
SET @DateNow='12:30'
select @DateNow
-------------------------------------OR--------------------------------------
select CAST( '12:30' as datetime )
Run Code Online (Sandbox Code Playgroud)



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


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

结果:12:30(我想要这个)

And*_*mar 9

就像José所说,你可以使用CONVERT将日期时间显示为日期.MSDN列出了所有可能的格式.例如,格式8是hh:mi:ss:

 select convert(varchar(32),getdate(),8)
 12:51:21
Run Code Online (Sandbox Code Playgroud)

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

 select convert(varchar(5),getdate(),8)
 12:51
Run Code Online (Sandbox Code Playgroud)

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

 select convert(varchar(32),getdate(),121)
 2009-05-08 12:51:21.987
Run Code Online (Sandbox Code Playgroud)

在哪里可以选择时间部分:

 select substring(convert(varchar(32),getdate(),121),12,5)
 12:51
Run Code Online (Sandbox Code Playgroud)

或者组合字符串技巧:

 select right(convert(varchar(16),getdate(),121),5)
 12:51
Run Code Online (Sandbox Code Playgroud)

对?对!


Jos*_*lio 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
Run Code Online (Sandbox Code Playgroud)