表TEST 有 A, B, C, D, E.....列.我现在想写个查询包含如下意思的SQL.select * from TEST t 
where 
(case when length(t.A) = 6 then t.B = '******' 
else length(t.A) = 4 then t.C = '******' 
end)
请问如何实现啊?
谢谢.

解决方案 »

  1.   

    select * from TEST t 
    where 
    (length(t.A) = 6 and t.B = '******') 
    or(length(t.A) = 4 and t.C = '******' )
    end) 
      

  2.   

    select * from TEST t 
    where 
    case when length(t.A) = 6 then t.B when length(t.A) = 4 then t.C 
    end = '******' 
      

  3.   

    谢谢回复.我还是贴上我的具体问题吧:
    select * from tu_*** t1, tu_*** t2 where
    (case when length(t1.a) = 4 then 
    t1.a = substr(t2.a,1,4) 
    else 
    substr(t1.a,5,2) =  substr(t2.a, 5,2) end)改成楼上的那样用OR好象行不通,逻辑也是不对的.
    能再帮忙想想吗?
      

  4.   

    select * from tu_*** t1, tu_*** t2 where 
    t1.a = substr(t2.a,1,4) or
    substr(t1.a,5,2) =  substr(t2.a, 5,2) 
    这个逻辑上能满足你那个条件的需求
      

  5.   

    学是有点问题
    select * from tu_*** t1, tu_*** t2 where 
    t1.a = substr(t2.a,1,4) or( 
    substr(t1.a,5,2) =  substr(t2.a, 5,2) and length(t1.a) >= 5 )
      

  6.   

    已经结贴,谢谢大家.关键是要象3楼那样, case里面不能写 条件 = 值.条件 和 值都要写CASE.case.... =  case....