我想判断一组数据如1050~2009,在一张表TableA中的两个字段中是否存在
TableA的结构为
ID Start End
1 1001 2000
2 2001 2005
3 2006 2010
。
也就是1050~2009这组数据在1001~2000、2001~2005、2006~2010、。一直向下,每条数据中是否存在
SQL语句该怎么写呢?高分送上!
TableA的结构为
ID Start End
1 1001 2000
2 2001 2005
3 2006 2010
。
也就是1050~2009这组数据在1001~2000、2001~2005、2006~2010、。一直向下,每条数据中是否存在
SQL语句该怎么写呢?高分送上!
print 1
else
print 0
CREATE TABLE TableA(iD INT,start int,[end] int)
insert into TableA
select 1,1001,2000 union all
select 1,2001,2005 union all
select 3,2006,2010SELECT ID,CAST(Start AS VARCHAR) + '~' + CAST([End] AS VARCHAR) FROM TableA
WHERE Start <= 1050 OR [End] >= 2009/*
1 1001~2000
3 2006~2010
*/
--你那一组数据是什么形式?
--得用个循环
select * from TableA where 你的每个数据 between Start and end
这里要判断的是1050~2009这一段数据在两个字段每一条记录的两个数据间是否存在,
比如:1050~2009先和第一条数据1001 至 2000 作比较看是否存在于两个数字之间
再和第二数据2001 至 2005 作比较....
再和第三条数据.....
第四条....
.....
总之有几条数据就比较几条数据
最终的结果主要是判断TableA这张表的两个字段数据间是否完全包含了1050~2009这一组数据
CREATE TABLE Tabletest(iD INT,start int,[end] int)
insert into Tabletest
select 1,1001,2000 union all
select 1,2001,2005 union all
select 3,2006,2010select* from tabletestIF exists(select * from Tabletest where start<=1050 and [end]>=2009) print'在两个字段里面'
else
print'没有在两个字段里面'
没有在两个字段里面
go
CREATE TABLE TableA(iD INT,start int,[end] int)
insert TableA select 1,1001,2000
union all select 1,2001,2005
union all select 3,2006,2010
union all select 4,1006,1030
union all select 5,1006,1050
go
--1050,2009SELECT *,
case when 1050 between start and [end] and 2009 between start and [end]
then '存在'
else '不存在'
end 状态
FROM TableA
/*
iD start end 状态
----------- ----------- ----------- ------
1 1001 2000 不存在
1 2001 2005 不存在
3 2006 2010 不存在
4 1006 1030 不存在
5 1006 1050 不存在(5 行受影响)
*/
SELECT *,
case when start between 1050 and 2009 and [end] between 1050 and 2009
then '存在'
else '不存在'
end 状态
FROM TableA
/*
iD start end 状态
----------- ----------- ----------- ------
1 1001 2000 不存在
1 2001 2005 存在
3 2006 2010 不存在
4 1006 1030 不存在
5 1006 1050 不存在(5 行受影响)
*/
SELECT *,
case when start between 1050 and 2009 or [end] between 1050 and 2009
then '存在'
else '不存在'
end 状态
FROM TableA
/*
iD start end 状态
----------- ----------- ----------- ------
1 1001 2000 存在
1 2001 2005 存在
3 2006 2010 存在
4 1006 1030 不存在
5 1006 1050 存在(5 行受影响)
*/
SELECT *,
case when 1050 between start and [end] or 2009 between start and [end]
then '存在'
else '不存在'
end 状态
FROM TableA
/*
iD start end 状态
----------- ----------- ----------- ------
1 1001 2000 存在
1 2001 2005 不存在
3 2006 2010 存在
4 1006 1030 不存在
5 1006 1050 存在(5 行受影响)
*/看下有没有一种情况是你要的.
我是在做一个票据管理的小程序,TableA是票据领入表,TableB是票据领用表,在做票据领用的时候,比如录入一段票号:1050 至 2005,保存时要判断一下TableA(票据领入表)中有没有领入过包含这段号的票号,如果有就允许保存,哪怕是只包含其中的一部分(如:1050-1060但不含1060-2005的数据)也不允许保存。还要判断TableB(票据领用表)有没有领用过1050 至 2005之间的票号,大概意思就是这样了。
print '不允许插入'
else
print '允许插入'