输入数据库里面的两个数据
一个是X
一个是区间Y[] 简单如(M,N)如果X在区间Y内 输出(M,N)
如果X在区间Y外 输入(M,N), X( X在区间(M,N)之前,X在(M,N)之后)(M,N)内数据有可能因为删改出现不存在情况 输入的X也存在不存在的情况
那种情况选取该不存在的记录的下一条如(2没有找3,3没有找4......)
区间一样(如:[3,N],3不存在则需要查找[4,N]这里可以将N看做一像TOP一样的数比如前100条数据等等)

解决方案 »

  1.   

    简单的说
    输入一个数   1
    再输入一个区间  1-100SQL得到的效果:1-100如果输入的是1再输入的区间是3-103SQL得到的结果是 1,3-103当输入的数是不是110
    再输入的区间是3-103
    输出的结果是  3-103,110
      

  2.   

    简单的说 
    输入一个数       1 
    再输入一个区间     1-100 SQL得到的效果:1-100 如果输入的是1 再输入的区间是3-103 SQL得到的结果是   1,3-103 当输入的数是不是110 
    再输入的区间是3-103 
    输出的结果是     3-103,110 -----------------
    这个简单,不过和SQL好像没有什么联系,,,
      

  3.   

    设表tb有字段id, id为int,不连续.
    楼主是指 以取id从m到n(m<n)之间的记录.及 id=x的记录.
    如果m到n之间存在x,那当然取到的就是 m到n
    如果m到n之间不存在x:
      若x 位于m-n外,即 x<m<n,则到 x union m-n
      若x 位于m-n之外,即 m<n<x,则取 m-n union x是否我说的这个意思? 可能手误.declare @x int,@m int,@n int
    select @x=1,@m=3,@n=103
    select *,pri=case when @x between @m and @n then 0 else case when @x<@m then -1 else 1 end end from tb where id=@x
    union
    select *,pri=0 from tb where id between @m and @n
    order by pri,id或者
    select * from tb where id between @m and @n or id=@x order by case when id between @m and @n then 0 else case when id<@m then -1 else 1 end end ,id
      

  4.   

    不好意思 昨天晚上没有能抽时间看大家的回复 对不起~~ TO'''fcuandy(人, 无完人;学, 无止境) 
    设表tb有字段id,   id为int,不连续. 
    楼主是指   以取id从m到n(m <n)之间的记录.及   id=x的记录. 
    如果m到n之间存在x,那当然取到的就是   m到n 
    如果m到n之间不存在x: 
        若x   位于m-n外,即   x <m <n,则到   x   union   m-n 
        若x   位于m-n之外,即   m <n <x,则取   m-n   union   x 
     -------------------------------------------------------
    其实我现在想要的和你说的差不多
    但有点比较麻烦的是
    我不知道(m,n)中的`n`是多少,所以无法用来做判断条件
    因为抽取的数据是从M像后的100行,而此后的100行最后第一百行我找不到
    无法用判断(m是一个任意的输入值)新的输入值x在这个区间之外(能判断比之小x<m然后union,但对于x>(m向后数100位的那个数值)
    这应该是我最想知道的重点~ 
      

  5.   

    TO ''victorcai2006
    当输入的数是不是110   
    再输入的区间是3-103   
    输出的结果是           3-103,110   
    ------------- 
    ????没有看懂~~~------------- ------------- 
    一个并集合,3-103连续的情况下(3,4,5,...103,110)
      

  6.   

    简单的说   
    输入一个数               1   
    再输入一个区间           1-100   SQL得到的效果:1-100   如果输入的是1   再输入的区间是3-103   SQL得到的结果是       1,3-103   当输入的数是不是110   
    再输入的区间是3-103   
    输出的结果是           3-103,110   ----------------- 
    这个简单,不过和SQL好像没有什么联系,,,----------------- ----------------- ----------------- 
    ----------------- ----------------- ----------------- 
    那是我举的例子 方便表述我想说的内容~~
    呵呵
    ----------------- ----------------- ----------------- 
    上面的是理想状态下的数据   
    也是连续的确特例   现在主要是要做的是如       输入3以后的100位(ID不连续)   
    然后判断一个数在不在上面的区间内   ---------------------- 
    这个还是看不懂,,,----------------- ----------------- ----------------- 
    ----------------- ----------------- ----------------- 
    数据库字段是不连续的
    就好象简单的一员工表
    员工号由于员工辞职以后将消失 
    然后就会空出来比如说4号员工辞职了
    我们的员工表里面就只有(1,2,3,5...X)
    就想描述这个意思
      

  7.   

    TO'''fcuandy(人,   无完人;学,   无止境)  
    你的意思是说m和n是行号?-----------------   -----------------   -----------------   
    -----------------   -----------------   -----------------   
    可以理解成行号
    但如果输入的m在数据库里没有的话那就要找下一个最接近M的值Y来替换M
    然后找Y和Y以后100行内,输入的X是否超出这个区间,X是固定的,没有的话就不考虑X,有的话就要判断是并还是不并
      

  8.   

    TO'''fcuandy(人,       无完人;学,       无止境)     
    那还是不对,   即然可以理解为行号 
    那么比如   m=2,n=102 
    当数据库中记录有超过102行时,那么这个行号就会存在 
    如果记录最多只101,那么102行就不存在,102都不存在,又何来下一个行号? 还是不明白. -----------------       -----------------       -----------------       
    -----------------       -----------------       -----------------       
    可以理解成行号 
    当数据库中记录有超过102行时,那么这个行号就会存在 
    //正常情况
    如果记录最多只101,那么102行就不存在,102都不存在,又何来下一个行号? 
    //取该记录到最末行
    比如数据库只有100行
    我要抽取5到达以后的100行 那肯定抽取的是(5-100)行数<100行
    输入的X要超出了这个条件就不列如检索条件了
      

  9.   

    这是我碰到的比较麻烦的需求\
    我没有能实现,觉得有点代表性,所以来看看大家的想法,有没有碰到类似的情况
    项目已经改了方案了,就是两个条件只要一个,就用简单的TOP实现,可我很想知道
    这个看起来好象简单的问题,我少考虑了什么东西!~`
      

  10.   

    union  一下
    然后order by 搞定
    哪有那么复杂
      

  11.   


    http://blog.csdn.net/roy_88/archive/2007/02/13/1509413.aspx