专栏首页健程之道SqlServer 关于 datetime 的更新引发的思考

SqlServer 关于 datetime 的更新引发的思考

今天在测试更新 SqlServer 表的 datetime 字段时,突然发现并没有更新成功,同时也没有报错,感觉十分诧异,因此仔细排查了一下,终于发现是和字段本身的精度有关。

现象

假设我们现在有一张 SqlServer 表 basic_info,其表结构为:

字段名

类型

name

varchar

open_time

datetime

现在其中有一条数据:

name

open_time

Jack

2014-05-25 11:11:01.260

现在我想把这条数据的 open_time 字段修改为 2014-05-25 11:11:01.262,执行语句:

update basic_info set open_time = '2014-05-25 11:11:01.262' where name = 'Jack';

结果是并没有更新为我想要的值:

name

open_time

Jack

2014-05-25 11:11:01.263

这个 263 是怎么出现的呢?

原因

这个问题我排查了很久,最终在关于 datetime 字段定义 的网站上,在关于字段描述的表中,有这么一行:

Accuracy            Rounded to increments of .000, .003, or .007 seconds

意思就是说, datetime 这个字段的 精度 ,四舍五入后会变为 .000, .003, or .007 秒。

这样的话,也就能说这个字段的时间毫秒数的个位数,只会是 0、3、7,那么也就能解释上面的现象,为什么我想更新成 2,最终变成了 3

解决方法

当你对于精度要求不高的话,比如只需要精确到秒级别,那么这个字段的使用完全是没有问题的。

但如果你一定需要精确到毫秒呢?那么可以使用 datetime2 类型,它的精度可以精确到 100 纳秒

总结

对于服务端开发人员,数据库几乎是一个无法避免的中间件,虽然我们并非专业的 DBA,但多了解一些总是好事。

有兴趣的话可以访问我的博客或者关注我的公众号、头条号,说不定会有意外的惊喜。

https://death00.github.io/

本文分享自微信公众号 - 健程之道(JianJianCoder),作者:健健壮

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Vue.set() this.$set()引发的视图更新思考

    mcq
  • 关于游戏自动更新工具的思考

    逍遥剑客
  • 关于游戏自动更新工具的思考

    网络游戏的自动更新很频繁,而多数玩家会抱怨下载速度过慢 同样的,如果全部都从游戏提供商的服务器上下载,势必导致网络资源的极大浪费,而且对于企业的更新服务器和带宽...

    逍遥剑客
  • Objective-C关于id引发的一些思考 原

        Objective-C是面向对象语言,但其中又并非全部是对象。在初学这门语言时,我常常从意识上将NS开头的类型与C语言原本的那些类型分割开来,假装他们之...

    珲少
  • 关于职业发展的思考

    转眼间毕业四年有余,大学所学专业是冶金,毕业后看冶金行业机械化程度较高,但是自动化、智能化程度与想象的还是有差距。就有想法学习自动化,软件编程方面的知识,用机械...

    易兒善
  • 关于敏捷开发的思考

    刚接触敏捷一个月左右,看各种设计模式、TDD、scrum、xp,但是当别人问到我什么是敏捷开发的时候,还是不知道怎么去回答,所以就想着,是时候理一下这些天学习的...

    刘开心_1266679
  • 关于游戏引擎结构上的思考

    逍遥剑客
  • 一次关于 Mysql 索引优化的思考

    执行SQL-1,显示耗时 9.35sec。显然是不乐观的一个值,查看其执行计划(explain):

    逆锋起笔
  • 关于开发流的一点思考

    突然想聊聊开发流的东西,可能在一个新的环境下对之前的整个开发流程有了些思考,思考什么?

    用户1093396

扫码关注云+社区

领取腾讯云代金券