【问题标题】:How do I rounding DateTime to 6 characters after the second?如何在第二个之后将 DateTime 舍入为 6 个字符?
【发布时间】:2023-03-23 10:31:01
【问题描述】:

我有一个名为 Test 的表,我有一个名为 Date 的列,它是 Datetime 数据类型。 我的要求是以这种格式获取日期的值:YYYY-MM-DD hh:mm:ss.123456。

但我得到的值如下:

Date
2011-03-09 11:35:03.890

所以我将 Date 列的数据类型更改为 Datetime2 所以现在我得到的值如下:

Date
2011-03-09 11:35:03.8900000

问题是在那几秒钟后我只想要 6 个字符,但我得到了 7 个。谁能帮我解决这个问题?

例子:

如果日期的值为 2011-03-07 11:35:03.1234567 那么它应该将值四舍五入到

2011-03-07 11:35:03.1234570 从那以后我只想要六个字符,所以

我想要这样的东西:

Date
2011-03-07 11:35:03.123457

【问题讨论】:

    标签: sql sql-server tsql sql-server-2008 datetime


    【解决方案1】:
    DECLARE @d DATETIME2 = '2011-03-07 11:35:03.1234567'
    
    SELECT CAST(CAST (@d AS DATETIME2(6)) AS CHAR(26))
    

    返回

    2011-03-07 11:35:03.123457
    

    【讨论】:

    • 这个表达式是否对值进行四舍五入?
    • @Sam - 是的,我更新了它以使用您的具体示例,而不是 getdate()
    • @Richard - 我在 SSMS 中打开了“文本结果”,没有它,它会将其截断为 2011-03-07 11:35:03.12。刚刚切换到网格模式,它并没有这样做。
    【解决方案2】:

    您需要转换精度来获得舍入,然后通过限制字符来截断它。请参阅以下示例:

    smalldatetime  2007-05-08 12:35:00
    datetime       2007-05-08 12:35:29.123
    datetime2      2007-05-08 12:35:29.1234567
    datetimeoffset 2007-05-08 12:35:29.1234567 +12:15
    

    试试:

    CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(6)) AS CHAR(26)
    

    参考MSDN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-12
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多