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/

  • 相关阅读:
    Kudu-Impala集成特性
    [转]IIS的各种身份验证详细测试
    [转]The NTLM Authentication Protocol and Security Support Provider
    [转]WxEmojiView
    [转]Redis 数据类型
    [转]a-mongodb-tutorial-using-c-and-asp-net-mvc
    [转]MongoDB 概念解析
    [转]flash.net.Socket
    [转]emailjs-smtp-client
    [转]jquerUI Dialog中隐藏标题栏的关闭"X"按钮
  • 原文地址:https://www.cnblogs.com/Tonyyang/p/2576431.html
Copyright © 2011-2022 走看看