如何将日期时间转换为时间

Posted

技术标签:

【中文标题】如何将日期时间转换为时间【英文标题】:How to cast the DateTime to Time 【发布时间】:2015-07-14 00:04:34 【问题描述】:

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

select CAST([time] as time) as [CSTTime]

日期时间 2015-03-19 00:00:00.000

当前输出:时间 03:05:36.0000000

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

如何过滤或将其转换为精确的HH:MM:SS 格式。

【问题讨论】:

你到底是怎么把03:05:36.00000002015-03-19 00:00:00.000转换成TIME格式的? 【参考方案1】:

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 个字节用于日期,后 4 个字节用于时间。 SQL Server 可以将这两组 4 个字节解释为整数。 ........ ........ SQL Server 将时间的第二个整数存储为午夜之后的时钟滴答数。一秒包含 300 个滴答声,因此一个滴答声等于 3.3 毫秒 (ms)。

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

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

【讨论】:

@suslov 感谢格式改进。今后我会努力达到这个标准。 HH:MM 的可能解决方案是什么? @AbdullahAlMamun 只需转换为 char(5) - 像这样:convert(char(5), [timeValue], 108)【参考方案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

【讨论】:

以上是关于如何将日期时间转换为时间的主要内容,如果未能解决你的问题,请参考以下文章

如何将日期时间转换为时间戳 Python

如何使用 C#/.NET 将日期时间转换为时间戳(忽略当前时区)

如何将日期转换为时间戳?

将日期和时间转换为时间戳 [重复]

使用 PySpark 将日期和时间字符串转换为时间戳时如何保留毫秒?

Javascript:如何将 exif 日期时间数据转换为时间戳? [复制]