Oracle 截取字符串(截取固定分隔符中间的字符

#### Oracle 截取字符串(截取固定分隔符中间的字符) ####

####  oracle 取固定分隔符之间的字符
--方法一 substr+ instr
SELECT  substr('12JPX#4806(JP)',instr('12JPX#4806(JP)','#')+1,(instr('12JPX#4806(JP)','('))-(instr('12JPX#4806(JP)','#')+1) ) FROM dual
结果 4806

--方法二 正则表达式

SELECT REGEXP_SUBSTR(REGEXP_SUBSTR('12JPX#4806(JP)','[^#]+',1,2,'i'),'[^(]+',1,1,'i')  FROM DUAL;
结果   4806
注意!!!! : 如果首个符号为第一个时,  

#### 取字段包含A-Z的正则表达式用法

select *  from gaa_file t  where regexp_like(t.gaa02,'^[A-Z]');


#### 4GL 截取字符串(截取固定分隔符中间的字符) ####
####利用while循环取出一个包含多个'x'的字符串,最后一个'x'后面的字符 ####

搞个while循环取出来
  WHILE TRUE
     IF guige.getIndexOf("x",1) THEN
        LET guige = guige.substring(guige.getIndexOf("x",1)+1, guige.getLength())
     ELSE
        EXIT WHILE
     END IF
  END WHILE


#### 取得固定分隔符前面的字符串... ####

方法一:
 LET len_str = length(str1)
        LET index1 = 0
        LET str_ret=str1
        WHILE index1<len_str
            LET index1=index1+1
            IF str1[index1,index1]=p_flag THEN
                LET str_ret=str1[1,index-1]
                EXIT WHILE
            END IF
        END WHILE

方法二:
FOR i=1 TO length(xxxx) STEP +1
   LET temp = xxx[1,i]
   IF temp LIKE '*/' THEN
       RETURN temp[1,i-1]
   END IF
END FOR

#### 4gl截取字符串进行判断  ####
   FOR li_i = pi_start TO pi_end
       LET ls_chk_chr = ps_source.getCharAt(li_i)
       IF ls_chk_chr NOT MATCHES "[0-9a-zA-Z]" THEN
          LET li_result = FALSE
          EXIT FOR
       END IF
   END FOR

####以固定符号取出字符串中的内容(这里以'&'作为范例)####

DEFINE  l_tok       base.stringTokenizer      #080121
DEFINE  l_str       LIKE type_file.chr1000
DEFINE  l_str1      LIKE type_file.chr1000
    LET l_str ="abasf&asdfa&asfa"
    IF NOT cl_null(l_str) THEN
       LET l_tok = base.StringTokenizer.create(l_str,"&")
       WHILE l_tok.hasMoreTokens()
          LET l_str1 = l_tok.nextToken()
       END WHILE
    END IF

####以固定符号取出字符串中的内容(这里以'&'作为范例)####

posted @ 2018-06-07 15:18  Noney  阅读(14891)  评论(0编辑  收藏  举报