我使用CAST语法将DateTime字段转换为Time。
select CAST([time] as time) as [CSTTime]DateTime 2015-03-19 00:00:00.000
当前输出: Time 03:05:36.0000000
我只需要HH:MM:SS,而不是毫秒或0000
如何过滤或转换为精确的HH:MM:SS格式。
发布于 2015-05-04 22:43:57
在SQL Server中,Time不以其显示格式存储。
因此,从用户的角度来看,您可以说它没有格式。
当然,这并不完全准确,因为它确实有一种存储格式,但作为一个普通用户,你不能真正使用它。
这适用于所有日期和时间数据类型:
Date、DateTimeOffset、DateTime2、SmallDateTime、DateTime和Time。
如果您需要一种格式,那么您不需要强制转换为time,而是转换为char。使用Convert获取所需的char:
SELECT CONVERT(char(10), [time], 108) as CSTTime 如果你感兴趣,这里有一些背景数据:
在2000年出版的this article中,作者深入解释了SQL Server如何处理日期和时间。我怀疑在2000到2015年间,SQL Server在内部存储date、time和datetime值的方式是否有任何重大变化。
如果你不想全部阅读,这里有相关的引文:
那么SQL Server如何在内部存储日期呢?它使用8个字节来存储日期时间值-前4个字节表示日期,后4个字节表示时间。SQL Server可以将这两组4个字节解释为整数。
.
.
SQL Server将该时间的第二个整数存储为午夜后的时钟滴答数。一秒包含300个刻度,因此一个刻度等于3.3毫秒(ms)。
由于time实际上存储为一个4字节的整数,因此它实际上没有格式作为数据类型的组成部分。
您可能还想查看this article,以获得更详细的代码示例解释。
发布于 2016-02-02 21:08:04
您只需在下面的代码中简单地使用TIME(0)数据类型就可以用CAST实现它:
SELECT CAST('2015-03-19 01:05:06.289' AS TIME(0))输出:
01:05:06
发布于 2016-09-10 17:55:38
SQL Server2008:
select cast(MyDate as time) [time] from yourtable早期版本:
select convert(char(5), MyDate , 108) [time] from yourtable其他选项:
SELECT CONVERT(VARCHAR(20), GETDATE(), 114)从datetime 中获取时间而不需要堆栈的最简单方法是:
SELECT CONVERT(time(0),GETDATE())小时和分钟
SELECT substring(CONVERT(VARCHAR, GETDATE(), 108),0,6) AS Timehttps://stackoverflow.com/questions/30032915
复制相似问题