SQL Server:时间范围查询重叠
常常碰到要校验数据范围是否存在重叠冲突的情况,典型的场景是房间预订。
假如房间A已经有9月1日-9月10日的预订记录,当其它客人再来预订时,系统必须判断,不能与这个日期范围产生重叠。
有四种情况会产生重叠:
1、全包含:例如用户企图预订8月30日-9月15日;
2、被包含:例如用户企图预订9月5日-9月6日;
3、下限包含:例如用户企图预订8月30日-9月2日;
4、上限包含:例如用户企图预订9月8日-9月15日。
使用SQL查询判断时,就需要考虑到这全部四种情况,而我们常常只考虑到其中两种,错误的写法就像这样:
SELECT * FROM rooms WHERE ID=1 AND (starttime BETWEEN '2011-09-01' AND '2011-09-10' OR endtime BETWEEN '2011-09-01' AND '2011-09-10' )
正确的写法如下:
SELECT *
FROM ROOMS
WHERE ID = 1
AND (STARTTIME BETWEEN '2011-09-01' AND '2011-09-10' OR
ENDTIME BETWEEN '2011-09-01' AND '2011-09-10' OR
'2011-09-01' BETWEEN STARTTIME AND ENDTIME OR
'2011-09-10' BETWEEN STARTTIME AND ENDTIME)
这样才算把四种情况都考虑周全了。
————————————————
原文链接:https://blog.csdn.net/yishengreai/article/details/6865426
SQL Server:时间范围查询重叠的更多相关文章
- 转载 50种方法优化SQL Server数据库查询
原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...
- Sql Server中查询今天、昨天、本周、上周、本月、上月数据
Sql Server中查询今天.昨天.本周.上周.本月.上月数据 在做Sql Server开发的时候有时需要获取表中今天.昨天.本周.上周.本月.上月等数据,这时候就需要使用DATEDIFF()函数及 ...
- Sql Server参数化查询之where in和like实现详解
where in 的参数化查询实现 首先说一下我们常用的办法,直接拼SQL实现,一般情况下都能满足需要 string userIds = "1,2,3,4"; using (Sql ...
- 【转】Sql Server参数化查询之where in和like实现之xml和DataTable传参
转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/29/2475427.html 在上一篇Sql Server参数化查询之where in和li ...
- 【转】Sql Server参数化查询之where in和like实现详解
转载至:http://www.cnblogs.com/lzrabbit/archive/2012/04/22/2465313.html 文章导读 拼SQL实现where in查询 使用CHARINDE ...
- SQL Server中查询用户的对象权限和角色的方法
--SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_h ...
- 优化SQL Server数据库查询方法
SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列 ...
- SQL Server 2008 查询所有用户表
SQL Server 2008 查询所有用户表的T-SQL语句是: SELECT * FROM sysobjects WHERE [xtype] = 'U' 或者是: SELECT * FROM sy ...
- SQL Server 2016 查询存储性能优化小结
SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...
随机推荐
- 织梦DedeCms网站内部SEO详细分析
一.确定网站的目标关键词 最为重要的一方面,一般网站首页的目标关键词建议在1-3个.对于目标关键词的选取有几个建议 1.定位:网站的内容和业务相关 2.分析:对用户体验及竞争对手的网站进行分析 3.筛 ...
- JUnit 学习资料
JUnit 学习资料 网址 JUnit 入门教程(极客学院) http://wiki.jikexueyuan.com/project/junit/ 官方网站 https://junit.org/jun ...
- async 珠峰培训node正式课笔记 【async】任务流程控制,异步流程控制
var async = require('async'); // series 串形任务 console.time('cost') async.series({ two:function(callba ...
- python - django 设置自定义文件保存路径
一. settings.py MEDIA_URL = "/qir/" # 设置获取文件时的访问根路径 MEDIA_ROOT = os.path.join(BASE_DIR, &qu ...
- Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method 'POST' not supported (附带其余好几个坑)
yml: feign: httpclient: enabled: true properties: #feign feign.httpclient.enabled=true <!-- https ...
- fitnesse管理引进的jar包
如下:需要引进的jar很多,并且路径都不一样,这样增加删减jar就比较麻烦 !*> setup!define TEST_SYSTEM {slim}!define LOCAL_PATH {C:\ ...
- Ubuntu 下安装 Qt Designer
1. apt-get install qt5-designer 2.终端下输入designer,显示: designer: could not exec '/usr/lib/x86_64-linux- ...
- string类的用法总结
string中常见的成员函数 示例代码: string s= string("abcdefg"); char ch[] = "abcdefgd"; //调用构造 ...
- JVM和ClassLoader
JVM和ClassLoader 2019-11-08 目录 1 JVM架构整体架构 1.1 类加载器子系统 1.1.1 加载 1.1.2 链接 1.1.3 初始化 1.2 运行时数据区(Runtime ...
- bootstrap 多级联动下拉框
<!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...