我想判断一组数据如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语句该怎么写呢?高分送上!

解决方案 »

  1.   

    if exists(select 1 from tablea where @v between start and end)
       print 1
    else 
       print 0
      

  2.   


    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
    */
      

  3.   


    --你那一组数据是什么形式?
    --得用个循环
    select * from TableA where 你的每个数据 between Start and end
      

  4.   

    select * from TableA where Start between 1050 and 2009 or end between 1050 and 2009 
      

  5.   

    可能我的问题描述得有点简单
    这里要判断的是1050~2009这一段数据在两个字段每一条记录的两个数据间是否存在,
    比如:1050~2009先和第一条数据1001  至  2000 作比较看是否存在于两个数字之间
    再和第二数据2001 至 2005 作比较....
    再和第三条数据.....
    第四条....
    .....
    总之有几条数据就比较几条数据
    最终的结果主要是判断TableA这张表的两个字段数据间是否完全包含了1050~2009这一组数据
      

  6.   


    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'没有在两个字段里面'
    没有在两个字段里面
      

  7.   

    if object_id('TableA') is not null drop table TableA 
     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 行受影响)
    */看下有没有一种情况是你要的.
      

  8.   

    这个问题描述起来有点复杂,我把我的用意说一下吧!
    我是在做一个票据管理的小程序,TableA是票据领入表,TableB是票据领用表,在做票据领用的时候,比如录入一段票号:1050 至  2005,保存时要判断一下TableA(票据领入表)中有没有领入过包含这段号的票号,如果有就允许保存,哪怕是只包含其中的一部分(如:1050-1060但不含1060-2005的数据)也不允许保存。还要判断TableB(票据领用表)有没有领用过1050 至  2005之间的票号,大概意思就是这样了。
      

  9.   

    if   exists(select 1 from tb2 where not(start>2009 or [end]<1050))
         print '不允许插入'
    else
        print '允许插入'
      

  10.   

    生成 一个1050 到2005的连续中间表然后与ta tb连接