SQL Server解惑——为什么你的查询结果超出了查询时间范围[通俗易懂]

SQL Server解惑——为什么你的查询结果超出了查询时间范围[通俗易懂]废话少说,直接上SQL代码(有兴趣的测试验证一下),下面这个查询语句为什么将2008-11-27的记录查询出来了呢?这个是同事遇到的一个问题,个人设计了一个例子。 USE AdventureWorks

废话少说,直接上SQL代码(有兴趣的测试验证一下),下面这个查询语句为什么将2008-11-27的记录查询出来了呢?这个是同事遇到的一个问题,个人设计了一个例子。

 

USE AdventureWorks2014;

代码100分

代码100分GO

SELECTFROM [Person].[Person]

代码100分WHERE ModifiedDate >= "2008-11-26 00:00:00:000"

  AND ModifiedDate <= "2008-11-26 23:59:59.999"

 

 

clip_image001

 

其实如果细看过文档的话,应该知道是什么原因,因为数据类型Datetiem的时间范围:00:00:00 到 23:59:59.997 , 最后部分的范围为0 ~997,官方文档提示,datetime的表的小数部分精度的有舍入,具体请见下面

 

datetime 秒的小数部分精度的舍入

如下表所示,将 datetime 值舍入到 .000、.003、或 .007 秒的增量 。

用户指定的值

系统存储的值

01/01/98 23:59:59.999

1998-01-02 00:00:00.000

01/01/98 23:59:59.995

01/01/98 23:59:59.996

01/01/98 23:59:59.997

01/01/98 23:59:59.998

1998-01-01 23:59:59.997

01/01/98 23:59:59.992

01/01/98 23:59:59.993

01/01/98 23:59:59.994

1998-01-01 23:59:59.993

01/01/98 23:59:59.990

01/01/98 23:59:59.991

1998-01-01 23:59:59.990

 

实验测试验证,998会转换为997,而”2008-11-26 23:59:59.999″的话,就会转换为”2008-11-27 00:00:00.000″,如下截图所示,所以尤其对数据精确性有要求的地方,要注意这些地方,否则SQL语句得出的结果在逻辑上就有误。

 

clip_image002

 

官方文档https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/datetime-transact-sql?view=sql-server-ver15 中也有描述不准确的地方,如下截图所示: 

clip_image003

 

 

其实这个是精度问题,如果选择datetime2数据类型,它默认的小数精度更高,不会遇到这个问题,更多细节建议参考官方文档(下面参考资料)

 

 

 

参考资料:

 

https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/datetime2-transact-sql?view=sql-server-ver15

https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/datetime-transact-sql?view=sql-server-ver15

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11055.html

(0)
上一篇 2022-12-17
下一篇 2022-12-17

相关推荐

  • 数据库原理基础一[通俗易懂]

    数据库原理基础一[通俗易懂]数据的分类: 结构化数据:有固定的格式,例如一个表格里面的信息 非结构化数据:无固定格式,例如图片、网页、语音、视频 半结构化数据:html、xml格式的数据 数据库:存放数据的一个集合,可以是文件的

    2023-06-04
    161
  • GROUP BY 后获取每一组最新的一条记录[亲测有效]

    GROUP BY 后获取每一组最新的一条记录[亲测有效]最近有个需求,一个订单可能会存在多个支付单,需要我们获取每个订单最新的支付单。思路如下:

    2023-05-01
    147
  • 如何使用PS鼠标滚轮放大缩小

    如何使用PS鼠标滚轮放大缩小Photoshop是一种很重要的图像处理工具,你可以用它来编辑照片、设计图形、制作动画等等,而鼠标是我们在使用PS时必需的一个工具,本文主要为大家介绍如何使用PS鼠标滚轮来进行放大缩小操作。相信大家都使用过PS,但是对于一些新手来说,可能不是很清楚如何使用鼠标滚轮来进行放大缩小等操作,也不知道有哪些快捷键来帮助自己快速完成任务。本文的目的就是为大家介绍一些PS鼠标的相关使用技巧,帮助大家更好地使用PS。

    2024-04-27
    76
  • Python def函数的使用

    Python def函数的使用Python def函数是Python语言中非常基础和重要的编程工具,用于定义函数,即一段代码块,实现某些特定的功能并可以重复调用。在不同的场景中,Python def函数的应用有很多,比如数据分析、机器学习、Web开发等领域中皆有应用。

    2024-08-09
    27
  • Python三元运算符的用法详解

    Python三元运算符的用法详解Python三元运算符是一种简洁的if-else判断形式,可以在一行中进行判断,使代码更加简洁明了。本文将详细介绍Python三元运算符的使用方法。

    2024-08-26
    23
  • Oracle学习笔记二十六:触发器的使用「建议收藏」

    Oracle学习笔记二十六:触发器的使用「建议收藏」一、触发器简介 • 什么是触发器(trigger) • 触发器在数据库里以独立的对象存储,由数据库产生某一类事件而启动运行,即触发器是当某个事件发生时自动地隐式运行。 • 触发器的特点 •

    2023-05-22
    141
  • [mysql]double/float/decimal「建议收藏」

    [mysql]double/float/decimal「建议收藏」[mysql]double/float/decimal double 可以有小数,虽然navicat里显示0,0 FLOAT 和 DOUBLE 在不指定精度时,默认会按照实际的精度(由计算机硬件和操…

    2022-12-15
    160
  • 深圳哪里可以开家用电器发票-中国-新闻网

    深圳哪里可以开家用电器发票-中国-新闻网深圳哪里可以开家用电器发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridge,是Andro…

    2023-02-01
    149

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注