在存储过程里面select地址,但是不显示地址的后8个字符,也就是4个汉字,并且如果最后4个字符是“12345678”则不显示后16个字符

解决方案 »

  1.   

    直接语句SQL> select * from a;
     
    STR
    --------------------------------------------------------------------------------
    12334zho中国人民
    ffsddgdsfdff谁说的发
    bghgfhgf12345678
    fgdfgdfg
     
    SQL> 
    SQL> select case
      2           when ascii(substr(str, length(str) - 3, 1)) > 128 and
      3                ascii(substr(str, length(str) - 2, 1)) > 128 and
      4                ascii(substr(str, length(str) - 1, 1)) > 128 and
      5                ascii(substr(str, length(str), 1)) > 128 then
      6            substr(str, 1, length(str) - 4)
      7           when substr(str, length(str) - 7, length(str)) = '12345678' then
      8            substr(str, 1, length(str) - 8)
      9           else
     10            str
     11         end
     12    from a;
     
    CASEWHENASCII(SUBSTR(STR,LENGT
    --------------------------------------------------------------------------------
    12334zho
    ffsddgdsfdff
    bghgfhgf
    fgdfgdfg
      

  2.   

    就是字符串函数组合起来的阿。第一个是判断字符的ascii码汉字的,汉字的ascii码>128的
    下面的是截取字符串=12345678阿楼主可以看这两个函数就可以了。
      

  3.   

    这个我看明白了,但是你用ascii码判断了以后就不删除后面有数字的字段值,我想要的是无论最后是否是汉字还是字符,就删除8个字符就好,如果最后是“XXXXXXXX”这个是说最后是相当于"XXXXXXX"的8个字符不用判断是否是汉字。。能修改下么?多谢了
      

  4.   

    select REGEXP_SUBSTR(REGEXP_SUBSTR(f,'[a-z,A-Z,0-9]+[^12345678]'),'[a-z,A-Z,0-9]+') as f from (
    select '12334zho中国人民' as f from dual union
    select 'ffsddgdsfdff谁说的发' from dual union
    select'bghgfhgf12345678' from dual union
    select'fgdfgdfg' from dual)
      

  5.   


    --将3楼的sql改为如下:
    select case when substr(str, length(str) - 7, length(str)) = '12345678' then
    substr(str, 1, length(str) - 8) else substr(str, 1, length(str) - 4) end
    from a;
      

  6.   

    SELECT  SUBSTR(T.NAME, 1, LENGTH(T.NAME) - 8)||'********',SUBSTR(T.NAME, 1, LENGTH(T.NAME) - 8) FROM TBL_TESTBAK t;
      

  7.   

    select case 
           when substrb(&string,-8) = '12345678' then
                     substrb(&string,1,lengthb(&string) - 16)
           else
                     substrb(&string,1,lengthb(&string) - 8)
           end   result_sting
    from &table;
      

  8.   

    先谢谢大家的指导,最后我做出来了
    在这里和大家分享
    select decode(substrb(address,-8),'举个例子',substrb(address,1,lengthb(address) - 16) , substrb(address,1,lengthb(address) - 8)) 
    from TABLE