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
格式。#1 楼
Time
不会以其显示格式存储在SQL Server中。因此,从用户角度来看,您可以说它没有格式。
当然,由于它确实具有存储格式,因此并不完全准确。 ,但作为普通用户,您不能真正使用它。
对于所有日期和时间数据类型都是如此:
Date
,DateTimeOffset
,DateTime2
,SmallDateTime
,DateTime
和Time
。如果您需要一种格式,则无需强制转换为
time
,而是强制转换为char
。使用Convert
获得所需的char
: SELECT CONVERT(char(10), [time], 108) as CSTTime
如果您有一些背景数据,请使用感兴趣:
在2000年发布的这篇文章中,作者深入解释了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字节整数,因此它确实没有格式作为数据类型的组成部分。还想查看本文以获取有关代码示例的更详细说明。
评论
@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
评论
从地球上将2015-03-19 00:00:00.000转换为TIME格式时,您如何获得03:05:36.0000000?