22,209
社区成员
发帖
与我相关
我的任务
分享
where (begin <1 and end >1 and end <12) --2 线段的结束节点 在AB段内,而 开始节点不在此区间。
or (begin >=1 and end <=12 ) --1 线段开始与结束节点 都在AB段内
or (begin >1 and begin<=12 and end >12 ) --3 线段的开始节点 在AB端内 而结束节点不在此区间。
or (begin <1 and end >12 ) --4 线段AB真包含于线段开始与结束节点
--其实有四种情况:
1 线段开始与结束节点 都在AB段内。
2 线段的结束节点 在AB段内,而 开始节点不在此区间。
3 线段的开始节点 在AB端内 而结束节点不在此区间。
4 线段AB真包含于线段开始与结束节点 (如: begin <1 and end >12
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-11-16 09:42:26
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[begin] int,[end] int)
insert [tb]
select 1,0,9 union all
select 2,9,15 union all
select 3,7,19 union all
select 4,14,20
--------------开始查询--------------------------
declare @start int,@end int
set @start=1
set @end=12
select
*
from
tb
where
id
in
(select case when ([begin] between @start and @end) or ([end] between @start and @end) then id end as id from tb)
----------------结果----------------------------
/* id begin end
----------- ----------- -----------
1 0 9
2 9 15
3 7 19
(3 行受影响)
*/
where (begin <=1 and end >1 )
or (begin >=1 and end <=12 )
or (begin <=12 and end >12 )
SELECT *
FROM 你的表名字
WHERE begin BETWEEN '起点' AND '终点' OR end BETWEEN '起点' AND '终点'