解决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'的区间里,自然也就查不到对应的数据啦。仅个人猜想,不喜勿喷!酷

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值