天天看點

Oracle中的正則替換【REGEXP_REPLACE】和正則like【REGEXP_like】

下面圖檔中有三種“加瓦”,java,Java,JAVA

Oracle中的正則替換【REGEXP_REPLACE】和正則like【REGEXP_like】
select regexp_replace(city,'java','蒼井空',1,0,'i') from lidw li
           
Oracle中的正則替換【REGEXP_REPLACE】和正則like【REGEXP_like】

regexp_replace(1,2,3,4,5,6)

文法說明:1:字段   2:替換的字段  3:替換成什麼  4:起始位置(預設從1開始)  5:替換的次數(0是無限次)  6:不區分大小寫

【補充:】用regexp_replace來判斷oracle中的某列為數字的:

以下是百度知道的答案:是否數字-百度知道

SELECT(REGEXP_REPLACE('LSS12345', '[^0-9]')) FROM DUAL;---取出值裡面的全部數字

SELECT LENGTH('LSS12345'),LENGTH(REGEXP_REPLACE('LSS12345', '[^0-9]')) FROM DUAL; ---查詢出字段的長度和字段内數字的長度

SELECT* FROM DUAL  WHERE LENGTH('LSS12345') = LENGTH(REGEXP_REPLACE('LSS12345', '[^0-9]')) ;  ----查詢這個字段所有的純數字列      

自己的延伸:判斷入庫的時候,插入的手機号碼(11位)

select * from t_d_strategy st where length(regexp_replace(st.s_name,'[^0-9]')) =11 and st.s_isdeleted = 0
           

由以上的sql語句知道:regexp_replace是用替換的方式取出資料,那麼如果要得到這列全部是數字的呢???

方式①:

select * from t_d_strategy st where regexp_like(st.s_name,'^[0-9]+[0-9]$');
           

方式②:來自百度文庫的答案某列全是數字-百度文庫

select * from t_d_strategy st where trim(translate(nvl(st.s_name,'x'),'0123456789',' ')) is NULL;
           

translate函數的第三個參數是一個空格,不是'', 因為translate的第三個參數如果為空的話,那麼永遠傳回'',這樣的就不

能達到過濾純數字的目的。這樣把所有的數字都轉化為空格,如果全部是由數 構成,那麼一旦trim後自然是空,實作

了上述目标。當然如果想排除空項的話,可以這樣寫:

  select * from table where trim(translate(nvl(column,'x'),'0123456789',' ')) is NULL;--x 表示任何'0-9'以外的字元。

兩種方式得到的結果一模一樣,哼哼,漲姿勢了~

函數nvl說明:nvl函數-百度知道

如果你某個字段為空,但是你想讓這個字段顯示0
nvl(字段名,0),就是當你選出來的時候,這個字段雖然為空,但是顯示的是0,當然這個0也可以換成其他東西,如:1,2,3……      

函數translate說明:translate函數-部落格園

一、文法: 

TRANSLATE(string,from_str,to_str) 

二、目的 

傳回将(所有出現的)from_str中的每個字元替換為to_str中的相應字元以後的string。TRANSLATE 是 REPLACE 所提供的功能的一個超集。如果 from_str 比 to_str 長,那麼在 from_str 中而不在 to_str 中的額外字元将從 string 中被删除,因為它們沒有相應的替換字元。to_str 不能為空。Oracle 将空字元串解釋為 NULL,并且如果TRANSLATE 中的任何參數為NULL,那麼結果也是 NULL。 

三、允許使用的位置 

過程性語句和SQL語句。 

四、示例 

Sql代碼

SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual; 

TRANSLATE ( 

-------------- 

123456ghij 

SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual; 

TRANSL 

---------- 

123456 

---------------------------------------------------------華麗的分界符---------------------------------------------------------

select * from lidw where regexp_like(city,'java','i')
           
Oracle中的正則替換【REGEXP_REPLACE】和正則like【REGEXP_like】

regexp_like(1,2,3)

文法說明:1:字段  2:查詢的關鍵字  3:不區分大小寫(哈哈,以後就可以不用 (upper()))

繼續閱讀