【SqlServer】datetime存储精度问题探究
最近使用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时间舍入的规则

总结一下就是:
9进0
0、1舍入为0
2、3、4舍入为3
5、6、7、8舍入为7
【SqlServer】datetime存储精度问题探究的更多相关文章
- C# DateTime类型和sqlserver DateTime精度不同
在最近的项目中, 有个关于时间的功能.一个请假的时间.前端选择的时候只有日期.所以比如请一天假就是选2017-8-15和2017-8-15,这样算请这一天的假.但是后台存入数据库时我不能就存2017- ...
- mssql sqlserver 可以存储二进制数据的字段类型详解
转自: http://www.maomao365.com/?p=6738 摘要: 下文将从数据库的数据类型着手,剖析在sqlserver数据库中可以存储二进制数据的数据类型,如下所示: mssql s ...
- #define与运算精度问题探究
#include <stdio.h> #define SQR(X) X*X int main(int argc, char* argv[]) { ; ; ; printf("SQ ...
- Sqlserver数据库存储路径的修改
Sqlserver数据库存储路径的修改 Sqlserver数据库存储路径问题:本系统sqlserver路径默认是存储在C盘目录下的,由于数据会慢慢变大和避免重装系统数据丢失等问题,最好手动将路径设置在 ...
- sqlserver datetime的bug
sqlserver datetime 的毫秒的个位似乎存在bug,只有0.3.7这三个值,比如: 2018-01-20 23:59:59:999会变成2018-01-21 00:00:00.000 2 ...
- sqlserver datetime的bug?
sqlserver datetime 的毫秒的个位似乎存在bug,只有0.3.7这三个值,比如: 2018-01-20 23:59:59:999会变成2018-01-21 00:00:00.000 2 ...
- 深入理解Sqlserver文件存储之页和应用 (转)
我们每天都在使用数据库,我们部门使用最多的关系数据库有Sqlserver,Oracle,有没有想过这些数据库是怎么存放到操作系统的文件中的?有时候为了能够设计出最优的表结构,写出高性能的Sqlserv ...
- DateTime的精度小问题
一般来说判断时间的话,用个DateTime类型就已经够用了.但是有些情况,比如下面这种 DECLARE @DT1 DATETIME DECLARE @DT2 DATETIME SELECT @DT1 ...
- Sqlserver DateTime转换成SMALLDATETIME时“产生一个超出范围的值”
工作中遇到一个问题,A表中字段(DateTime1)的数据类型为DateTime,新建了一张表B的SMALLDATETIME1字段的数据来自A表的DateTime1 但在将A表字段DateTime1导 ...
- datetime的精度
最近有需要将分钟线的数据进行内联拼接,但时间没有必要精确到秒,微秒. df['datetime'] = pd.to_datetime(df['datetime']) df = df.set_index ...
随机推荐
- NetCore开源项目,适合新手学习
VerEasy.Core 介绍 这是一个基于 .NET Core 的易开发的框架,附 vue3前端框架.提供了一个高效可扩展的API程序. 支持 JWT 认证.数据库操作.日志记录.异步处理等特性,能 ...
- springboot的Web项目编译运行时提示错误:Field userService in com.cetc.UserManger.controller.UserController required a bean of type 'com.cetc.UserManger.service.UserService' that could not be found.
错误描述: springboot的Web项目编译运行时提示错误:Field userService in com.cetc.UserManger.controller.UserController r ...
- 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.3版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...
- JuiceFS 2024:开源与商业并进,迈向 AI 原生时代
即将过去的 2024 年,是 JuiceFS 开源版本推出的第 4 年,企业版的第 8 个年头.回顾过去这一年,JuiceFS 社区版依旧保持着快速成长的势头,GitHub 星标突破 11.1K,各项 ...
- Dynamic CRM最常用的3种查询方式
在crm系统中 接口或者插件中 通常都会有查询的校验 实际上单查询的话 不用crm提供的方式也可以 直接用sql的方式去查,一般涉及到很多表的联动查询比如报表查询时,还是用sql更方便 一.Que ...
- Task异常处理的坑
全局异常 TaskScheduler.UnobservedTaskException += (e, args) =>{ MessageBox.Show("ddddddddddddddd ...
- Linux部署Redis哨兵集群 一主两从三哨兵
目录一.哨兵集群架构介绍二.下载安装Redis2.1.选择需要安装的Redis版本2.2.下载并解压Redis2.3.编译安装Redis三.搭建Redis一主两从集群3.1.准备配置文件3.1.1.准 ...
- Linux curl brew命令详解
命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具 ...
- 2025春秋杯DAY2DAY3部分wp
2025春秋杯DAY2DAY3部分wp DAY2 WEB easy_ser 源码如下 <?php //error_reporting(0); function PassWAF1($data){ ...
- react事件 报错Cannot read property 'setState' of undefined
import React, { Component } from "react"; export class TestHanderClick extends Component { ...