本帖最后由 ruisnow_ran 于 2014-03-31 14:26:44 编辑

解决方案 »

  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 6500 BETWEEN a AND (CASE WHEN b<a THEN b+10000 ELSE to_number(b) END)
      

  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 6500 BETWEEN a AND (CASE WHEN b<a THEN b+10000 ELSE to_number(b) END)如果输入0050的话,还要
    能查询到
    6001      0100
      

  3.   

    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 6500 BETWEEN a AND (CASE WHEN b<a THEN b+10000 ELSE to_number(b) END)如果输入0050的话,还要
    能查询到
    6001      0100
    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
      

  4.   

    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 6500 BETWEEN a AND (CASE WHEN b<a THEN b+10000 ELSE to_number(b) END)如果输入0050的话,还要
    能查询到
    6001      0100
    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 a3q,结贴
      

  5.   

    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 6500 BETWEEN a AND (CASE WHEN b<a THEN b+10000 ELSE to_number(b) END)如果输入0050的话,还要
    能查询到
    6001      0100
    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这个有点问题啊,不能用 or ,我输入一个9999 把三个都查出来了