`

解决SQL Server中between and数据不包含的问题

阅读更多

SQL Server中的between and基本用法大家耳熟能详,这里不说它的用法,就说最近用它查数据时碰到的一个问题。基本情况是这样子的:

数据库中有一个字段field7,是datetime类型的,也就是这个字段会保存年月日 时分秒的数据,当页面传过来数据'2017-04-18'(开始时间)和'2017-04-20'(结束时间)时,查询的SQL应该是:

field7 between '2017-04-18' and '2017-04-20'。这样子查询之后,能查询到18/19的数据,20的数据没有。

而实际上我们需要显示20号的数据。

 

解决方法有4个

1、手动往日期后面加1(不推荐)

基本思路:获取到日期之后手动给日期+1,也就是人为的推后一天,这样子就出来当前的数据了。

弊端:需要处理跨月、跨年、闰年的情况,比较麻烦。所以不推荐。

 

2、在between and的日期后面添加时分秒的限制(推荐)

如:field7 between '2017-04-18 00:00:00.000' and '2017-04-20 23:59:59.999'

 

3、使用>=、<=并且在日期后面添加时分秒的限制

如:field7>='2017-04-18 00:00:00.000' and field7<='2017-04-20 23:59:59.999'

 

4、使用日期函数datediff

如:datediff(day,'2017-04-18',field7)>=0 and datediff(day,'2017-04-20',field7)<=0

 

PS:试了第二种方法之后,觉得between and并不像印象中和网上说的闭合关系(between包含开始数据,and不包含),而是时间的限制不一样。像最开始问题描述的一样,那时候的between对时间的限制是00:00:00.000,and的限制也是这个,像2017-04-20 15:22:32.287这样子的数据,

必然不在 '2017-04-18 00:00:00.000' and '2017-04-20 00:00:00.000'的区间里,自然也就查不到对应的数据啦。仅个人猜想,不喜勿喷!酷

 

分享到:
评论

相关推荐

    SQL-server2000数据库管理系统A.docx

    A、包括15岁和35岁 B、不包括15岁和35岁 C、包括15岁但不包括35岁 D、包括35岁但不包括15岁 10、在SQL Server2000中.( )为用户建立数据库提供模板。A、master B、model C、tempdb D、msdb 11、SQL Server系统中的...

    精通SQL 结构化查询语言详解

    《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供317个典型应用,读者可以随查随用,针对SQL Server和Oracle进行讲解,很有代表性。 全书共包括大小实例317个,突出了速学速查的特色。《精通SQ:结构化查询语言...

    SQL编写规范(数据库操作规范)

     在FROM子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表    当ORACLE处理多个表时,会运用排序及合并的方式连接它们    首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行排序;    ...

    经典SQL语句大全

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    经典全面的SQL语句大全

     8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括 select * from table1 where time between time1 and time2 select a,b,c, from table1 where a not between 数值1 and 数值2 ...

    [详细完整版]IT数据库.doc

    条件年龄between 15 and 35 表示年龄在15和35之间,且(A)包括15岁和35岁 7 下列4选项中不正确的是(C)SQL语言可以自动实现关系数据库的规范化 8 SQL语言中,删除表中数据的操作是(A)delete 9 SQL中的视图是从...

    sql经典语句一部分

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    数据库操作语句大全(sql)

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db ...

    T-SQL高级查询

    --高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 ...那么公式表表达式可以解决这个问题。 我们可以将公式表表达式(CET)视为临时结果集,在select、insert、update、delete...

    SQL语法大全

    sql="select * from 数据表 where 字段名 between 值1 and 值2" (2) 更新数据记录: sql="update 数据表 set 字段名=字段值 where 条件表达式" sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where...

    超实用sql语句

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    Database Processing Fundamentals, Design, and Implementation (12th Edition).rar

    《数据库处理:基础、设计与实现(第11版)(英文版)》从基础、设计和实现三个层面介绍数据库处理技术,内容全面翔实,既包括数据库设计、数据库实现、多用户数据处理、数据访问标准等经典理论,也包括商务智能、XML和...

    达内总结的java最新笔试题core java,sql,web应有尽有

    10.请说明SQLServer中delete from tablea & truncate table tablea的区别 11. Oracle安装完成后,如何用命令行启动和关闭数据库? 12. 类有哪三个基本特性?各特性的优点? 13.谈谈对XML的理解?说明Web应用中Web.xml...

    SQL sever 实训

    SQL sever 2008 Rar! ?s X祕BwL0 17240671-1.sql ?年3月9日 --1.查询course表的所有信息(所有行所有列) USE Xk GO SELECT * FROM Course --有哪些种类的选修课?学分是多少 USE XK GO SELECT Kind,Credit FROM ...

    数据库设计,建模和部署工具BDBPro3.1-setup_EN

    It supports Oracle, SQL Server, MySQL, Access, SQLAnywhere and Sybase. 它支持Oracle , SQL Server时, MySQL的访问, sqlanywhere和Sybase 。 In addition, BDB is also a great SQL Query Intellisense ...

    mysql数据库的基本操作语法

    当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。 注意:外键约束的参照列,在主表中引用的只能...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来...

    oracle数据库经典题目

    6.在SQL语句中,用于向表中插入数据的语句是Insert。 7.如果需要向表中插入一批已经存在的数据,可以在INSERT语句中使用Select语句。 8.使用Describe命令可以显示表的结构信息。 9.使用SQL*Plus的Get命令可以将...

    情境四-公司管理数据库系统的查询.doc

    查询的最基本方式是使用SELECT语句,按照用户给定的条件从SQL Server 2000数据库中取出数据,并将数据通过一个或多个结果集返回给用户。 (一)SELECT语句结构 SELECT 语句的主要的子句可归纳如下: SELECT [ALL" ...

    ZendFramework中文文档

    10.4.2. 同一表中查询多列数据 10.4.3. 多表联合查询 10.4.4. WHERE条件 10.4.5. GROUP BY分句 10.4.6. HAVING 条件 10.4.7. ORDER BY 分句 10.4.8. 通过总数和偏移量进行LIMIT限制 10.4.9. 通过页数和总数...

Global site tag (gtag.js) - Google Analytics