首页 > 数据库 >【SqlServer】datetime存储精度问题探究

【SqlServer】datetime存储精度问题探究

时间:2024-11-22 14:57:32浏览次数:1  
标签:00 01 create SqlServer datetime 2024 探究 AlarmItem id

最近使用sqlserver 2012的时候注意到datetime类型的毫秒的精度是存在问题的,好奇是怎么回事,特意来研究一下

问题复现

如下的sql执行

UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.000' Where id=1;
UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.001' Where id=2;
UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.002' Where id=3;
UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.003' Where id=4;
UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.004' Where id=5;
UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.005' Where id=6;
UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.006' Where id=7;
UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.007' Where id=8;
UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.008' Where id=9;
UPDATE AlarmItem SET create_time = '2024-01-01 00:00:00.009' Where id=10;
select id,create_time from AlarmItem where id in (1,2,3,4,5,6,7,8,9,10)

不点开下面的执行结果,想想看,觉得答案会是怎么样?

点击查看执行结果
1	2024-01-01 00:00:00.000
2	2024-01-01 00:00:00.000
3	2024-01-01 00:00:00.003
4	2024-01-01 00:00:00.003
5	2024-01-01 00:00:00.003
6	2024-01-01 00:00:00.007
7	2024-01-01 00:00:00.007
8	2024-01-01 00:00:00.007
9	2024-01-01 00:00:00.007
10	2024-01-01 00:00:00.010

可以注意到,数据并没有按照我们期望的那样,例如001 存入后变成了000 而002变成了003,这个原因是什么呢?

探究原因

翻看微软的官方文档可以发现在SQL Server中,DateTime的精度是3.33毫秒,也就是存在精度丢失的情况
同时微软自己定义了关于DateTime时间舍入的规则
image

总结一下就是:
9进0
0、1舍入为0
2、3、4舍入为3
5、6、7、8舍入为7

标签:00,01,create,SqlServer,datetime,2024,探究,AlarmItem,id
From: https://www.cnblogs.com/idealy/p/18560911

相关文章

  • 一文探究SaaS的发展历程
    海外SaaS产业起步早,已成熟。我国SaaS产业发展分四阶段:概念萌芽期(2004-2005年)、探索转型期(2005-2015年)、高速扩张期(2015-2020年)、成长变革期(2020年至今),各阶段受多种因素影响,现状呈现新特点与趋势。SaaS(Software-as-a-Service,软件即服务)是一种基于云计算的软件交......
  • sqlserver显示说明字段
    1.先关闭SQLServer2.运行(Ctrl+R),输入regedit,打开注册表会弹出一下界面 3.直接Ctrl+F搜索DataProject过程会有点慢……4.找到SSVPropViewColumnsSQL70和SSVPropViewColumnsSQL80数字代表的列如下:(1)ColumnName(2)DataType(3)Length(4)Precision(5)Scale(6)AllowNulls(7)Default......
  • SQLServer数据库里的递归CTE详细说明
     SQLServer数据库里的递归CTE详细说明  用实例来说明:样例: --解释CTE递归的运算逻辑(代码不一定可用,但逻辑准确)WITHBOM_CTEAS(--基础层(B段):选择特定BOM物料编码的所有BOM条目,并设置层级为1SELECTBOMNOAS'TopBOM',COMPID,REQQTY,1AS......
  • LocalDateTime一些常用方法及示例
    packagecom.aaa.day04.api;importcom.aaa.utils.MyTool;importjava.time.*;importjava.time.format.DateTimeFormatter;importjava.util.Set;/***@author:nie6668888*@date:Createdin2024/11/1514:22*@description:*@modifiedBy:*@version:......
  • SqlServer运维——重建索引
    目录0.什么是重建索引1.什么时候需要重建索引2.如何重建索引:重建索引和删除原索引后再创建新索引3.如何重建索引4.创建重建索引的定时作业5.附录0.什么是重建索引如果表中记录频繁地被删除或插入,尽管表中的记录总量保持不变,索引空间的使用量会不断增加。虽然记录从索引......
  • Python 时间模块(time,datetime)
    在Python中,time模块和datetime模块都与时间处理相关,但它们有着不同的特点和用途,以下为你详细介绍:一.time模块概述:time模块提供了各种与时间相关的函数,它主要围绕着时间戳(从1970年1月1日00:00:00UTC到某个时刻所经过的秒数)来进行操作,常用于获取当前时间、对时间进......
  • SqlServer数据库恢复备份数据的方法
    一、如何备份 二、开始还原当时在公司是要将阿里云的sqlserver中的数据备份一份到公司内网数据库,并将数据恢复到公司内网SqlServer数据库,当我按照原库的要求创建了新的空库。在SSMS控制台还原的时候,它竟然报错,报:system.data.sqlclient.Sqlerror:备份集中的数据库备份与现......
  • Oracle,PostgreSQL,MySql,SqlServer各数据库查元信息的SQL
    Oracle查询表字段信息SELECTa.COLUMN_NAMEASB_NAME,--字段名称a.DATA_TYPE,--字段数据类型CASEWHENa.COLUMN_NAMEIN(SELECTcols.column_nameFROMall_constraintscons,all_cons_columnsco......
  • 基于JavaSwing开发问卷调查系统源码(SQLServer数据库) 课程设计 大作业
    ......
  • 解读 DelayQueue 源码:探究其精妙的设计架构与实现细节
    一、简介DelayQueue是JUC包(java.util.concurrent)为我们提供的延迟队列,用于实现延时任务比如订单下单15分钟未支付直接取消。它是BlockingQueue的一种,底层是一个基于PriorityQueue实现的一个无界队列,是线程安全的BlockingQueue的实现类DelayQueue 中存放的元素......