前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SqlServer 关于 datetime 的更新引发的思考

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

作者头像
健程之道
发布2020-12-17 11:42:04
6720
发布2020-12-17 11:42:04
举报
文章被收录于专栏:健程之道健程之道

今天在测试更新 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,执行语句:

代码语言:javascript
复制
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 字段定义 的网站上,在关于字段描述的表中,有这么一行:

代码语言:javascript
复制
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/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 健程之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 现象
  • 原因
  • 解决方法
  • 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档