如何将date时间转换为时间

我使用CAST语法将DateTime字段转换为Time。

select CAST([time] as time) as [CSTTime] 

DateTime 2015-03-19 00:00:00.000

现在产出:时间03:05:36.0000000

我只需要HH:MM:SS而不是毫秒或0000

如何过滤或将其转换为精确的HH:MM:SS格式。

Time不存储与SQL Server中的显示格式
因此,从用户的angular度来看,你可以说它没有格式。
当然,这并不完全准确,因为它具有存储格式 ,但作为普通用户,您无法真正使用它。
所有date和时间数据types都是如此:
DateDateTimeOffsetDateTime2SmallDateTimeDateTimeTime )。

如果你需要一个格式,那么你不需要投入time而是一个char 。 使用Convert来获得你需要的char

 SELECT CONVERT(char(10), [time], 108) as CSTTime 

以下是一些背景资料,如果你有兴趣:

在2000年发表的这篇文章中,作者深入解释了SQL Server如何处理date和时间。 我怀疑SQL Server在内部存储datetimedatetime time值的方式在2000年和2015年之间是否发生了重大变化。

这里是相关的引用,如果你不想阅读所有的话:

那么SQL Server如何在内部存储date呢? 它使用8个字节来存储date时间值 – date的前4个和时间的后4个。 SQL Server可以将4个字节的集合解释为整数。
……..
……..
SQL Server将该时间的第二个整数存储为午夜后的时钟滴答数。 第二个包含300个滴答,所以滴答等于3.3毫秒(毫秒)。

因为time实际上是作为一个4字节的整数存储的,所以它实际上没有格式作为数据types的组成部分。

您可能也想看看这篇文章的代码示例更详细的解释。

你可以用CAST来实现它,只需简单的使用下面的TIME(0)数据types:

 SELECT CAST('2015-03-19 01:05:06.289' AS TIME(0)) 

OUTPUT:

01:05:06

SQL Server 2008:

 select cast(MyDate as time) [time] from yourtable 

早期版本:

 select convert(char(5), MyDate , 108) [time] from yourtable 

其他选项:

 SELECT CONVERT(VARCHAR(20), GETDATE(), 114) 

没有毫秒级堆栈的date时间获取时间最简单的方法是:

 SELECT CONVERT(time(0),GETDATE()) 

小时和分钟

 SELECT substring(CONVERT(VARCHAR, GETDATE(), 108),0,6) AS Time