【问题标题】:How to cast the DateTime to Time如何将 DateTime 转换为 Time
【发布时间】:2015-05-04 14:37:43
【问题描述】:

我正在使用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格式的?

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


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 2013-02-26
      • 2020-03-04
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2012-06-20
      • 2013-07-25
      相关资源
      最近更新 更多