zoukankan      html  css  js  c++  java
  • Sql Server 问题之between and 使用注意事项

    今天也遇到了下面问题。以后使用Between 都要注意了,最好不用!

    1.问题:

    有五条数据如下:
    2010-12-01 12:16:10.000
    2010-12-02 13:11:28.000
    2010-12-03 13:49:15.000
    2010-12-04 13:52:28.000
    2010-12-05 13:52:28.000

    我使用select * from table where  [time] between '2010-12-1' and '2010-12-6' 能显示出这五条 


    如果我使用select * from sk_SmsSee where  [time] between '2010-12-1' and '2010-12-5'
    为什么就显示4条呢?
    2010-12-01 12:16:10.000
    2010-12-02 13:11:28.000
    2010-12-03 13:49:15.000
    2010-12-04 13:52:28.000

    换句话说最后的日期总是不显示为什么呢?

    经过测试 代码换成select * from table where  [time]>='2010-12-1 12:00:00' and [time]<='2010-12-5 12:00:00'  也是显示4条。既然数据库中存在2010-12-5日的数据,那为什么[time]<='2010-12-5 ' 查不出来呢?

    2.答案如下:

    MS SQL Server 系统中使用Bewteen ... And 其作用域是闭区间,即包含左右边界值在内的。

    另外在MS SQL 系统中对于日期DATE-->DATETIME隐式转化时,系统会自动增加 TIME字段00:00:00

    即从日期型 " 2010-12-01" 隐式转化为  日期时间型时为 "2010-12-01 00:00:00"

    所以对日期型使用Between ...AND...时,即实际只会包含另边值的部分值,可以使用半开半闭区间( >= && < )实现你所提到的问题。

    欢迎转载,转载请注明出处:http://www.cnblogs.com/Tonyyang/

  • 相关阅读:
    OpenJudge 3765(最大权闭合图,最小割
    多校8-1010 HDU5389 (dp
    570D Codeforces Round #316 (Div. 2) D(dfs序,时间戳,二分
    CodeForces
    hiho一下!
    HDU 4123(树上任意点到其他点的最远距离,rmq
    Oracle创建索引;查询索引
    HBase启动和停止命令
    flink dom4j冲突异常
    flink checkpoint状态储存三种方式选择
  • 原文地址:https://www.cnblogs.com/Tonyyang/p/2576431.html
Copyright © 2011-2022 走看看