如何将日期时间转换为时间
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.0000000
从2015-03-19 00:00:00.000
转换成TIME
格式的?
【参考方案1】:
Time
未以其显示格式存储在 SQL Server 中。
因此,从用户的角度来看,您可以说它没有格式。
当然,这并不完全准确,因为它确实具有存储格式,但作为普通用户,您并不能真正使用它。
这适用于所有日期和时间数据类型: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 以获得更详细的代码示例说明。
【讨论】:
@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
【讨论】:
以上是关于如何将日期时间转换为时间的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C#/.NET 将日期时间转换为时间戳(忽略当前时区)