加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 从XML转换为SQL Server datetime时,毫秒错误

发布时间:2020-12-12 06:24:58 所属栏目:MsSql教程 来源:网络整理
导读:我遇到了将数据时间从 XML(ISO8601:yyyy-mm-ddThh:mi:ss.mmm)转换到SQL Server 2005 datetime的问题.问题是转换毫秒是错误的.我已经使用来自nvarchar的convert(datetime,MyDate,126)测试了隐式和显式转换,结果是一样的: Original Result2009-10-29T15:43:
我遇到了将数据时间从 XML(ISO8601:yyyy-mm-ddThh:mi:ss.mmm)转换到SQL Server 2005 datetime的问题.问题是转换毫秒是错误的.我已经使用来自nvarchar的convert(datetime,MyDate,126)测试了隐式和显式转换,结果是一样的:
Original                Result
2009-10-29T15:43:12.990 2009-10-29 15:43:12.990
2009-10-29T15:43:12.991 2009-10-29 15:43:12.990
2009-10-29T15:43:12.992 2009-10-29 15:43:12.993
2009-10-29T15:43:12.993 2009-10-29 15:43:12.993
2009-10-29T15:43:12.994 2009-10-29 15:43:12.993
2009-10-29T15:43:12.995 2009-10-29 15:43:12.997
2009-10-29T15:43:12.996 2009-10-29 15:43:12.997
2009-10-29T15:43:12.997 2009-10-29 15:43:12.997
2009-10-29T15:43:12.998 2009-10-29 15:43:12.997
2009-10-29T15:43:12.999 2009-10-29 15:43:13.000

我的非广泛测试显示最后一位数字是0,3或7.这是一个简单的四舍五入问题吗?毫秒精度是重要的,失去/获得一两个不是一个选择.

解决方法

是的,SQL Server将时间缩短到3.(3)毫秒:
SELECT CAST(CAST('2009-01-01 00:00:00.000' AS DATETIME) AS BINARY(8))
SELECT CAST(CAST('2009-01-01 00:00:01.000' AS DATETIME) AS BINARY(8))

0x00009B8400000000
0x00009B840000012C

如您所见,这些DATETIME的差异为1秒,其二进制表示方式为0x12C,小数点为300.

这是因为SQL Server将DATETIME的时间部分存储为午夜的1/300秒钟.

如果要更精确,则需要将TIME部分存储为单独的值.像在DATETIME一样,将时间舍入到第二位,毫秒或其他列中的INTEGER需要的精度.

这将允许您使用复杂的DATETIME算术运算,例如在DATETIME上添加月份或查找周日期,您可以添加或减少毫秒数,并将结果连接为.XXXXXX HH:MM以获取有效的XML表示.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读