1. 程式人生 > >Oracle中的正則替換【REGEXP_REPLACE】和正則like【REGEXP_like】

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

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


select regexp_replace(city,'java','蒼井空',1,0,'i') from lidw li



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'以外的字元。

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

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

一、語法: 
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')



regexp_like(1,2,3)

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