Oracle使用函數將一個字符里的字母去掉:

丹東網站制作公司哪家好,找成都創新互聯公司!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設等網站項目制作,到程序開發,運營維護。成都創新互聯公司自2013年創立以來到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選成都創新互聯公司。
select case when regexp_like(字段名,'.([a-z]+|[A-Z])') then '包含字母' else '不包含字母' end
from 表名字
正則表達式函數:regexp_like
關鍵的參數是第二個:'.([a-z]+|[A-Z])'其中.表示匹配任何單字符,換行符除外
[a-z]是小寫字母|或[A-Z]大寫字母
1.首先是去除空格在進行比較(比如,把姓名中的所有空格去除):
Update table_name set xm=replace(xm , ' ') ;
如果要查找哪些記錄含有' ',可用相關的語句查找。
然后可進行比較。
2.但是我們可能會發現,有些姓名中間或末尾還有類似空格的字符沒被去掉,但它們顯然已經不是一般的空格了,那么懷疑是Tab健作怪。于是參照網上說的去掉TAB鍵的辦法來處理,用chr(9)來替代空格鍵(TAB鍵的ASCII值為9)。先取一條帶有類空格字符的記錄來做實驗:
SELECT replace(xm, chr(9) ) from table_name where bh=’xxx’;
用這個辦法會去掉一些真正的Tab鍵空格,然后采取批量更新的辦法。
3.但我遇到的情況沒有這么幸運,沒能去掉類空格鍵。怎么辦呢?我決定嘗試先取得這個類空格鍵的ASCII碼值,然后再用chr(ASCII碼值)的方法來處理。
①.取得含類空格鍵整個字符串的長度 length(),從而確定出類空格鍵在字符串中的起始位置、類空格鍵的長度。
②.求出類空格鍵的ASCII碼值:ascii(substr(xm,n,m)); n為類空格鍵的起始位置;m為長度。
③.SELECT replace(xm, chr(第②步求得的ASCII碼值) ) from table_name where bh=’xxx’;
問題得以解決。但我發現,上述第②步求得的ASCII碼值為41377,這應該是一個漢字的ASCII碼值,看起來又像空格,于是我懷疑,會不會是中文狀態下的空格鍵、TAB鍵?嘗試之后發現不是。我又懷疑,是不是全角、半角的區別?因為我們一般輸入字符,是在半角下輸入的。我按照第一步“1.首先是去除空格在進行比較……”嘗試,輸入全角下的空格,進行查找,結果驚喜出現,原來所有未剔除掉的類空格,是全角狀態下輸入的空格,并接證實了全角下輸入的空格,其ASCII碼值為41377。
這個函數的功能主要是用于去除給定字符串中重復的字符串.在使用中需要指定字符串的分隔符.示例:
str := RemoveSameStr('zhang,Zhang,bao,Bao,bao,zhang', ',');
輸出: zhang,Zhang,bao,Bao
--SQL
str varchar2(1000);
currentIndex number;
startIndex number;
endIndex number;
type str_type is table of varchar2(30) index by binary_integer;
arr str_type;
Result varchar2(1000);
begin
-- 空字符串
if oldStr is null then
return('');
end if;
--字符串太長
if length(oldStr) 1000 then
return(oldStr);
end if;
str := oldStr;
currentIndex := 0;
startIndex := 0;
loop
currentIndex := currentIndex + 1;
endIndex := instr(str, sign, 1, currentIndex);
if (endIndex = 0) then
exit;
end if;
arr(currentIndex) := trim(substr(str,
startIndex + 1,
endIndex - startIndex - 1));
startIndex := endIndex;
end loop;
--取最后一個字符串:
arr(currentIndex) := substr(str, startIndex + 1, length(str));
--去掉重復出現的字符串:
for i in 1 .. currentIndex - 1 loop
for j in i + 1 .. currentIndex loop
if arr(i) = arr(j) then
arr(j) := '';
end if;
end loop;
end loop;
str := '';
for i in 1 .. currentIndex loop
if arr(i) is not null then
str := str || sign || arr(i);
--數組置空:
arr(i) := '';
end if;
end loop;
--去掉前面的標識符:
Result := substr(str, 2, length(str));
return(Result);
end RemoveSameStr;
轉載,僅供參考。
分享文章:oracle怎么去掉字符 oracle去掉字符串中的字母
鏈接分享:http://www.yijiale78.com/article46/hhcphg.html
成都網站建設公司_創新互聯,為您提供軟件開發、靜態網站、云服務器、域名注冊、網站內鏈、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯