我正在使用DateTime语法将CAST字段强制转换为时间。

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格式。

评论

从地球上将2015-03-19 00:00:00.000转换为TIME格式时,您如何获得03:05:36.0000000?

#1 楼

Time不会以其显示格式存储在SQL Server中。
因此,从用户角度来看,您可以说它没有格式。
当然,由于它确实具有存储格式,因此并不完全准确。 ,但作为普通用户,您不能真正使用它。
对于所有日期和时间数据类型都是如此:DateDateTimeOffsetDateTime2SmallDateTimeDateTimeTime

如果您需要一种格式,则无需强制转换为time,而是强制转换为char。使用Convert获得所需的char

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


如果您有一些背景数据,请使用感兴趣:

在2000年发布的这篇文章中,作者深入解释了SQL Server如何处理日期和时间。我怀疑在2000年至2015年之间,SQL Server在内部存储datetimedatetime值的方式方面是否有重大变化。如果您不想阅读所有这些,请参见以下相关引号:


那么SQL Server如何在内部存储日期?它使用8个字节存储日期时间值-前4个用于日期,后4个用于时间。 SQL Server可以将两组4个字节都解释为整数。
........
........
SQL Server将第二个整数存储为午夜后的时钟刻度数。一秒钟包含300个滴答声,因此滴答声等于3.3毫秒(ms)。


由于time实际上存储为4字节整数,因此它确实没有格式作为数据类型的组成部分。

还想查看本文以获取有关代码示例的更详细说明。

评论


@suslov感谢您对格式的改进。将来,我将努力达到这一标准。

– Zohar Peled
15年5月13日在7:28

HH:MM的可能解决方案是什么?

–阿卜杜拉·阿尔·蒙蒙(Abdullah Al Mamun)
18年7月24日在12:07

@AbdullahAlMamun只是转换为char(5)-像这样:convert(char(5),[timeValue],108)

– Zohar Peled
18年7月24日在12:09

#2 楼

您可以使用CAST来实现它,只需在下面简单地使用TIME(0)数据类型即可:

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


输出:

01:05:06

#3 楼

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)


从日期时间中获取时间而没有毫秒堆栈的最简单方法是:

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

<小时和分钟

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