如表tbl_a
a     b
------------
1     a,b,c,d,e,f
2     s,w,t,k,r另有一变量 X ,我想得到这样一个结果,表tbl_a的b字段在变量X中占60
%以上,则显示OK,否则显示No;
例如:
X='abcxwd'
要求显示如下:
a     b
------------
1     OK
2     NO请问这样的sql语句怎么写,不要用循环(循环我知道怎么写,我是想知道能不能用一条sql语句完成)

解决方案 »

  1.   

    select a,
           (case when length(TRANSLATE( replace(b,',','') ,'abcxwd','')) 
                    < length( replace(b,',','') ) * 0.6 
                 then 'OK' 
                 else 'NO' 
           end) as 'b'
    from tbl_a
      

  2.   

    如果关键字是中文字符串呢?
    如:
    a      b
    ------------------
    1     北京,上海,广东,山西
    2     黑龙江,乌鲁木齐,江西,北京X='北京上海广东黑龙江乌鲁木齐'
      

  3.   

    czbbbs() ( )的方法应该没错。不过如果是中文你就需要特殊试验一下。做一点特殊的变动就可以实现。我的环境是DB2,试了一下需要把‘’换成相应的汉字才能通过。
      

  4.   

    我觉得czbbbs() 的思路挺好的,只是他这个方法对一个不确定长度的字符串来说无法解决
      

  5.   

    在我的數據庫裏
    TRANSLATE( 'aesgh' ,'abcxwd','')返回的是null
    原因就是第三個參數,所以第三個參數是不能為‘’的如果要達到這個結果必須在第二個字符串中,添加一個不會在字符串1中出現的字符
    如下:
    translate('aesgh','-abcxwd','-')這樣才可以把字符串2中的字符在字符串1中過濾掉我用的是oracle9i。
    難道你們的數據庫版本,第三個參數可以寫成‘’?
      

  6.   

    yqwd911(windy)说的是,但还是不能解决不定长是中文字符的问题
      

  7.   

    如表tbl_a
    a     b
    ------------
    1     a,b,c,d,e,f
    2     s,w,t,k,rX='abcxwd'

    a      b
    ------------------
    1     北京,上海,广东,山西
    2     黑龙江,乌鲁木齐,江西,北京X='北京上海广东黑龙江乌鲁木齐'
    两个例子有点区别。X='abcxwd'可能有意义,X='北京上海广东黑龙江乌鲁木齐'好像没啥意义。
    X这个参数是什么阿?是不是能改成'北京,上海,广东,黑龙江,乌鲁木齐'。这样就好弄了吧,呵呵。
      

  8.   

    先写一个函数判断60%,然后在select语句中利用这个函数。