不懂说的是不是这个意思select *
from 表a
where (str>=A and str<=B)
or (str>=A and a>b)
or (str<=B and a>b)

解决方案 »

  1.   

    WITH test AS(SELECT '5000' a,'6000' b FROM dual UNION ALL
    SELECT '6001','7000' FROM dual UNION ALL
    SELECT '6001','0100' FROM dual )
    SELECT *
      FROM TEST
     WHERE 0500 BETWEEN A AND
           (CASE WHEN B < A THEN B + 10000 ELSE TO_NUMBER(B) END)
        OR 0500 BETWEEN (CASE WHEN B < A THEN B - 10000 ELSE TO_NUMBER(B) END) AND A
    重复了,亲。。
      

  2.   

    哦,知道了,才写的又不满足的情况哈,改了一下,希望能满足你的需求。
    WITH test AS(SELECT '5000' a,'6000' b FROM dual UNION ALL
    SELECT '6001','7000' FROM dual UNION ALL
    SELECT '6001','0100' FROM dual )
    SELECT *
      FROM TEST
     WHERE 5500 BETWEEN A AND
           (CASE WHEN B < A THEN B + 10000 ELSE TO_NUMBER(B) END)
        OR 5500 BETWEEN (CASE WHEN B < A THEN 0001 ELSE TO_NUMBER(A) END) AND B