如何将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都是如此:
( Date
, DateTimeOffset
, DateTime2
, SmallDateTime
, DateTime
和Time
)。
如果你需要一个格式,那么你不需要投入time
而是一个char
。 使用Convert
来获得你需要的char
:
SELECT CONVERT(char(10), [time], 108) as CSTTime
以下是一些背景资料,如果你有兴趣:
在2000年发表的这篇文章中,作者深入解释了SQL Server如何处理date和时间。 我怀疑SQL Server在内部存储date
, time
和datetime
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