美文网首页
sqlserver datetime 类型 时间范围搜索

sqlserver datetime 类型 时间范围搜索

作者: Sunday_1024 | 来源:发表于2021-08-10 12:00 被阅读0次

    测试数据库是sql server 2019.
    简单创建一个表,只有主键自增id和datetime类型的列。

    插入数据
    insert into testdb(timecol) values('2020-01-02 00:00:00')
    insert into testdb(timecol) values('2020-01-03 23:59:59')
    insert into testdb(timecol) values('2020-01-03 23:59:59.993')
    insert into testdb(timecol) values('2020-01-03 23:59:59.994')
    insert into testdb(timecol) values('2020-01-03 23:59:59.995')
    insert into testdb(timecol) values('2020-01-03 23:59:59.996')
    insert into testdb(timecol) values('2020-01-03 23:59:59.997')
    insert into testdb(timecol) values('2020-01-03 23:59:59.998')
    insert into testdb(timecol) values('2020-01-03 23:59:59.999')

    select * from testdb;
    查询结果如下


    image.png

    注意,我是连续插入毫秒精度是993到999,数据库显示的结果是不一样。

    如上图 可以知道datetime类型的不怎么支持毫秒精度。时间范围 00:00:00 到 23:59:59.997
    参考官网: https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/datetime-transact-sql?view=sql-server-ver15

    如果想查询时间范围的内数据,比如说1月3日所有的数据,我们现在采用>= and <=方式来查询(这里不考虑用between and,结果跟>= and <=是一样的)

    image.png

    如上图,由于没写毫秒精度,有些数据查不到了(如图3到8条数据)。而且查询第二天也就是4日的数据也不包含。

    当然你可以把精度带上,能实现你想要的结果,如下


    image.png

    但你可能觉得上面有点啰嗦,可以试试下面的方法采用>= and <方式来查询,可以查询到目标数据。

    image.png

    综上, 推荐用>= and <方式来查询datetime时间范围的数据

    如果你对毫秒有要求,可以用datetime2类型的字段

    扩展说一下,有些朋友可能会为什么不用函数转换成字符串或日期的数字来比较?只要是sql带有函数效率都会低,这里尽量不要做转换;还有加索引什么的,不是咱本文讨论的范围。

    相关文章

      网友评论

          本文标题:sqlserver datetime 类型 时间范围搜索

          本文链接:https://www.haomeiwen.com/subject/cypxbltx.html