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()))