客户要求把一个字段里的是 有PDY字样的后5位代码含字母的定义为 非法代码需要置空。
请问如何实现?

解决方案 »

  1.   

    decode(substr(字段,1,3),'PDY',translate(a,'PDY1234567890'),字段)
      

  2.   

    decode(substr(字段,1,3),'PDY',translate(a,'PDY1234567890abcefghigklmnoqrstuvwxzABCEFGHIJKLMNOQRSTUVWXZ','PDY1234567890'),字段)或者用正则表达式,就是麻烦点
      

  3.   

    hebo2005 您真是大师啊!太感谢了:)
      

  4.   

    to hebo2005
    还有一个问题,PDY开头的是共9位
    如果PDY后的5位都是数字,第6位是字母 则认为合法
    比如PDY12345X 这个是合法的,只判断PDY后的5位是不是字母。 您发的语句则执行,好像不对,比如
    Select decode(substr(dept_code,1,3),'PDY',translate(dept_code,'PDY1234567890abcefghigklmnoqrstuvwxzABCEFGHIJKLMNOQRSTUVWXZ','PDY1234567890'),dept_code) 
    From irpt_departments Where dept_code Like 'PDY%'
    不管正确与否都显示出来了
    Select decode(substr(dept_code,1,3),'PDY',translate(dept_code,'PDY1234567890'),dept_code) From irpt_departments
    这个提示参数个数无效请问是怎么回事?多谢
      

  5.   

    那可以截取字符串嘛,共截取8位,然后再判断,我去做下测试
    不过translate是做替换,不是判断无效
      

  6.   

    你这个置空是什么意思啊
    比如说PDY123P45
    你想把它变成怎么样SELECT DECODE
              (SUBSTR (:INSTR, 1, 3),
               'PDY', 'PDY'
                || TRANSLATE
                      (SUBSTR (:INSTR, 4, 5),
                       '1234567890abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                       '1234567890'
                      )
                || SUBSTR (:INSTR, 9),
               :INSTR
              )
      FROM DUAL输入PDY123P45
    出来PDY12345
    输入PDY123P45D
    出来PDY12345D
      

  7.   

    不好意思,让您费解了置空就是弄成null或者‘’就行。只要能查到就行,update我就自己写了
      

  8.   

    那你可先把字符串这样替换
    'PDY'
                || TRANSLATE
                      (SUBSTR (:INSTR, 4, 5),
                       '1234567890abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                       '1234567890----------------------------------------------------'
                      )
                || SUBSTR (:INSTR, 9),
    反正把字母替换成字段里不会出现的
    然后再查找就简单了
      

  9.   

    正则表达式是10G才支持的,如果你是10G可以看下这个
    http://blog.csdn.net/annicybc/archive/2008/04/10/2277263.aspx