摘要:本文主要向大家介绍了SQLServer数据库之SQLServer的关键词BETWEEN的注意事项,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。
本文主要向大家介绍了SQLServer数据库之SQLServer的关键词BETWEEN的注意事项,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。
近段时间在程序中写到有关搜索的功能。其中有使用到MS SQLServer的关键词BETWEEN,它是搜索数值范围(包括本身)之间的数据。
在使用它时,一些情况还需要注意的。如果时间的数据。
搜索时间数据,要看数据库存储时间精度,存储只有日期或带有时间日期就需要注意了。不然搜索出来的数据与预期有有些出入。
如:
根据上面的数据,如果搜索日期17号至18的数据,你可以写的条件如下:
... WHERE [Date] BETWEEN '2016-10-17' AND '2016-10-18'。其实它可以等于下面的写法:
... WHERE [Date] >= '2016-10-17' AND [Date] <= '2016-10-18'。
因为BETWEEN是获取数值范围(包括本身)之间的数据。但如果NOT BETWEEN呢,则不包括边界的数据。
搜索到的结果,所有17和18号的数据均会搜索出来。
Ok,接下来我们看另外一些数据:
搜索上面这个资料时,如果再使用上面的条件:
... WHERE [Date] BETWEEN '2016-10-17' AND '2016-10-18'。
你会发现,只能搜索到17号的数据,没有18号的数据,除非刚好有一笔的时间为:2016-10-18 00:00:00:000,也只能搜索到18号此笔。检查原因,你需要参考它相等的语法:
... WHERE [Date] >= '2016-10-17' AND [Date] <= '2016-10-18',它还等于:
... WHERE [Date] >= '2016-10-17 00:00:00:000' AND [Date] <= '2016-10-18 00:00:00:000'
看了最后一个等价表过式,你就会明白它为何只搜索到17的所有数据了。
问题已经出来了,那我们怎样去解决它呢?如果你搜索的时间数据时,根据它的精度为处理。只有日期,没有时间的,大可以放心BETWEEN来搜索其范围。
当时间数据有日期和时间时,建议使用大于等于(>=) 和小于(<)结合的条件以及结束日期还要加一天。
如下:
WHERE [Date] >= '2016-10-17' AND [Date] < DATEADD(DAY,1,'2016-10-18')
其实,Insus.NET以前也有写过相关BETWEEN相关的博文,在这篇中的BETWEEN使用中,也有在结束时间时行加一天减2秒。其它这也是不正确的,在此作纠正处理方法。
还有一篇:《如何在Web网站实现搜索功能》,这篇在条件拼接时,只是定义到59秒,所以,当数据含有微秒时,就搜索不到了。
不管怎样,减秒是不正确的处理方法。还是时间的精度问题。
在MSDN中查阅的看看时间部分(datepart)在SQL Server版本之间区别:
总结:
搜索时间数据,需要放之四海皆准的法则,还是少用BETWEEN,在结束日期加一天,并使用小于(<)逻辑条件。
本文由职坐标整理并发布,希望对同学们学习SQL Server有所帮助,更多内容请关注职坐标数据库SQL Server数据库频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号