sql 时间交集

数据库时间段交集

给定一个时间区间(begin,end),数据库的一个时间区间(startTime,endTime)
1.最简单的列出各种情况

select * from table 
where (endTime<=end and endTime>=begin) 
or (startTime<=end and startTime>=begin) 
or (begin<startTime and end>endTime)

2.使用between

select * from table where ((begin between startTime and endTime) 
or (startTime between begin and end))

3.取反(重点是not)

//初始,就是送入的时间段在被比较时间段的两侧没有交集
select * from table where not ((endTime < begin) or (startTime > end))
//去掉not
select * from table where ((endTime>= begin) and ( startTime <=end))

测试代码:

create table test(
startTime date,
endTime date
)
insert test VALUES('2018-9-1','2018-9-10')
insert test VALUES('2018-8-30','2018-9-5')
insert test VALUES('2018-8-25','2018-8-30')

DROP TABLE test

SELECT * FROM test

declare @begin nvarchar(32)
declare @end nvarchar(32)
set @begin='2018-9-3'
set @end='2018-9-11'

select * from test where not ((endTime < @begin) or (startTime > @end))
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值