如何将DateTime转换为时间

时间:2015-05-04 14:37:43

标签: sql sql-server sql-server-2008

我使用CAST语法将select CAST([time] as time) as [CSTTime] 字段强制转换为时间。

2015-03-19 00:00:00.000

日期时间 03:05:36.0000000

现在输出:时间 HH:MM:SS

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

如何过滤或将其投射为精确的int格式。

4 个答案:

答案 0 :(得分:26)

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

如果您需要格式,则无需转换为time,而是转换为char。使用Convert获取您需要的char

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

以下是您感兴趣的一些背景数据:

在2000年发表的this article中,作者深入解释了SQL Server如何处理日期和时间。我怀疑在2000年到2015年间,SQL Server在内部存储datetimedatetime值的方式是否发生了重大变化。

以下是相关引用,如果您不想阅读全部内容:

  

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

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

您可能还想查看this article以获取有关代码示例的更详细说明。

答案 1 :(得分:9)

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

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

<强>输出:

01:05:06

答案 2 :(得分:1)

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)

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

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

小时和分钟

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

答案 3 :(得分:0)

以上所有答案都是正确的,您也可以在2012+年作为参考:

DECLARE @date datetime2 = SYSDATETIME()

SELECT FORMAT(@date, N'hh:mm:ss', N'en-US')
SELECT TIMEFROMPARTS(DATEPART(hh, @date), DATEPART(mm, @date), DATEPART(ss, @date),0,0)

FORMAT()允许您选择定界符和culture。它将返回NVARCHAR数据类型。

TIMEFROMPARTS()允许您选择精度,并且在您希望以任何方式舍入时间戳时都非常方便,因为它将内部的所有值都视为整数。它将返回TIME数据类型。