導航:首頁 > 凈水問答 > oracle過濾掉字元

oracle過濾掉字元

發布時間:2020-12-15 10:06:57

① 我在去除oracle中的特殊字元,但是要保留以下幾個字元 ( ) | 要怎麼寫語句

str=含有特殊字元的字元串

select translate(str,'()|'||str,'()|') from al;
--這個是只保留「()|」,其他所有字元數字漢字都去專除屬的。如果想加入保留什麼就在 『』 中再加入就可以了,不過加漢字就有點麻煩了。

select translate('您好123*(','()|'||'您好123*(','()|') from al;
TRANSLATE('您好123*(','()|'||'
----------------------------------------------------------------
(

② oracle怎麼去掉字元串的空格的數據

首先便是這Trim函數。Trim 函數具有刪除任意指定字元的功能,而去除字元串首尾空格則是trim函數被使用頻率最高的一種。語法Trim ( string ) ,參數string:string類型,指定要刪除首部和尾部空格的字元串返回值String。函數執行成功時返回刪除了string字元串首部和尾部空格的字元串,發生錯誤時返回空字元串("")。 如果參數值為null時,會拋出空指針異常。在oracle中,trim使用的形式多為人rtrim()與ltrim()兩種,分別為去除字元串右邊空格與去除字元串左邊空格。
當然trim的功能不止如此,下面進行細致的介紹,這里我多以去除字元串空格為例。
我們看下trim函數的語法描述:trim( [ { {leading|trailing|both} [trim_character]|trim_character} from] trim_source
1)、不使用任何參數
SQL> select trim(' 11 ') aa from al;

AA
--
11
這是最常見的一種使用方法,都使用默認的參數,默認情況下TRIM會同時刪除字元串前後出現的空格。
2)、使用both參數,效果等同於方法一不使用任何參數
SQL> select trim(both from ' 11 ') aa from al;

AA
--
11
「BOTH」參數表示同時去除字元串前後所指定的內容(默認情況下刪除空格)。
3)、使用leading與trailing參數
SQL> select trim(leading from ' 11 ') aa from al;

AA
----
11
SQL> select trim(trailing from ' 11 ') aa from al;

AA
-----
11
從結果中得分隔符'-',可以發現使用leading參數可以去除字元串右端的空格,而trailing參數則可以去除字元串左端的空格。正如oracle提供的rtrim()與ltrim()。
4)、使用trim_character參數
trim_character參數改變了「刪除空格」的默認行為。如果想要刪除字元串'xxxxWORLDxxxx'前後出現的「x」,「trim_character」參數就派上用場了。
SQL> select trim('x' from 'xxxxWORLDxxxx') aaaaa from al;

AAAAA
-----
WORLD
trim_character配合「both」、「trailing」和「leading」三個參數使用效果如下,與之前演示類似。看結果,不贅述。
SQL> select trim('x' from 'xxxxWORLDxxxx') aaaaa from al;

AAAAA
-----
WORLD

SQL> select trim(both 'x' from 'xxxxWORLDxxxx') aaaaa from al;

AAAAA
-----
WORLD

SQL> select trim(trailing 'x' from 'xxxxWORLDxxxx') aaaaa from al;

AAAAA
---------
xxxxWORLD

SQL> select trim(leading 'x' from 'xxxxWORLDxxxx') aaaaa from al;

AAAAA
---------
WORLDxxxx
必須注意的一點是這里的「trim_character」參數只允許包含一個字元,不支持多字元。trim不能滿足我們去除多字元要求,但是我們可以使用rtrim和ltrim來處理。
1)使用rtrim
SQL> select rtrim('ORxxxxWORLDxxxxOR','OR') aaaaa from al;

AAAAA
---------------
ORxxxxWORLDxxxx
2)使用ltrim
SQL> select ltrim('ORxxxxWORLDxxxxOR','OR') aaaaa from al;

AAAAA
---------------
xxxxWORLDxxxxOR
3)聯合使用RTRIM和LTRIM函數達到我們的目的
SQL> select rtrim(ltrim('ORxxxxWORLDxxxxOR','OR'),'OR') aaaaa from al;

AAAAA
-------------
xxxxWORLDxxxx

使用rtrim和ltrim函數時的注意事項:「OR」不表示整個「OR」字元串進行匹配,而是發現任意的字元「O」或字元「R」均做刪除操作。
對於trim函數的應用就介紹到,下面介紹一下replace函數,個人覺得replace函數在去空格時更好用。replace 函數用第三個表達式替換第一個字元串表達式中出現的所有第二個給定字元串表達式。來看下replace函數的語法描述:replace('string_replace1','string_replace2','string_replace3')
'string_replace1' 待搜索的字元串表達式,string_replace1 可以是字元數據或二進制數據。
'string_replace2' 待查找的字元串表達式,string_replace2 可以是字元數據或二進制數據。
'string_replace3' 替換用的字元串表達式,string_replace3 可以是字元數據或二進制數據。
返回類型,如果 string_replace(1、2 或 3)是支持的字元數據類型之一,則返回字元數據;如果 string_replace(1、2 或 3)是支持的 binary 數據類型之一,則返回二進制數據。
這里我們依然以去空格為例。
SQL> select replace(' aa kk ',' ','') abcd from al;

ABCD
----
aakk
與使用trim函數的結果進行對比,我們可以發現,使用replace函數不僅可以去除字元串兩端的空格,也可去除字元串內部的空格。
當然,如果只是要去除字元串兩端的空格,使用trim函數效率會更高。

③ Oracle sql語句把欄位中的某個字元去掉

不知道你日期欄位是date型還是varchar型
date型的話,你就改不了
varchar的話可以用
select replace(欄位名,'-','') from 表名
再看看別人怎麼說的。

④ Oracle sql語句把欄位中的某個字元去掉

1、創建測試表,

create table test_date2(id int , v_date varchar(20));

⑤ oracle如何去除字元串中的重復字元

代碼如下:

createorreplacefunctionremove_rame_string(oldStrvarchar2,signvarchar2)
returnvarchar2is

/****************************************************
**Oracle去掉重復字元串
**函數名稱:RemoveSameStr
**參數:【名稱】【類型】【說明】
**oldStrvarchar2要處理的字元串
**signvarchar2字元串分隔符
**返回值:Resultvarchar2不包含重復子串的記錄
****************************************************/
strvarchar2(2000);
currentIndexnumber;
startIndexnumber;
endIndexnumber;

typestr_typeistableofvarchar2(30)indexbybinary_integer;
arrstr_type;
Resultvarchar2(1000);
begin
--空字元串
ifoldStrisnullthen
return('');
endif;

--字元串太長
iflength(oldStr)>2000then
return(oldStr);
endif;
str:=oldStr;

currentIndex:=0;
startIndex:=0;

loop
currentIndex:=currentIndex+1;
endIndex:=instr(str,sign,1,currentIndex);
if(endIndex<=0)then
exit;
endif;

arr(currentIndex):=trim(substr(str,
startIndex+1,
endIndex-startIndex-1));
startIndex:=endIndex;
endloop;

--取最後一個字元串:
arr(currentIndex):=substr(str,startIndex+1,length(str));

--去掉重復出現的字元串:
foriin1..currentIndex-1loop
forjini+1..currentIndexloop
ifarr(i)=arr(j)then
arr(j):='';
endif;
endloop;
endloop;

str:='';
foriin1..currentIndexloop
ifarr(i)isnotnullthen
str:=str||sign||arr(i);
--數組置空:
arr(i):='';
endif;
endloop;

--去掉前面的標識符:
Result:=substr(str,2,length(str));

return(Result);
endremove_rame_string;

⑥ Oracle如何使用將一個字元里的字母去掉

Oracle使用函數將一個字元里的字母去掉:
select case when regexp_like(欄位名,'.([a-z]+|[A-Z])') then '包含字母' else '不包含字母' end
from 表名字

正則回表達式函數:regexp_like
關鍵的參數是答第二個:'.([a-z]+|[A-Z])'其中.表示匹配任何單字元,換行符除外
[a-z]是小寫字母|或[A-Z]大寫字母

⑦ Oracle怎麼用正則表達式過濾欄位中"非漢字"的所有字元

varreg=/([^抄s])/g;varstr="abcdef";vararr=str.match(reg);console.error(arr);

⑧ oracle如何去除字元串中數字

selectreplace(translate('abc1234def678add590a','0123456789',''),'','')fromal;

⑨ ORACLE中怎樣用正則表達式過濾中文字元

從表裡提取漢字, 需要考慮字元集, 不同的字元集漢字的編碼有所不同
這里以GB2312為例, 寫一函數准確地從表裡提取簡體漢字.

假設資料庫字元集編碼是GB2312, 環境變數(注冊表或其它)的字元集也是GB2312編碼
並且保存到表裡的漢字也都是GB2312編碼的

那麼也就是漢字是雙位元組的,且簡體漢字的編碼范圍是
B0A1 - F7FE
換算成10進制就是
B0 A1 F7 FE
176,161 - 247,254

我們先看一下asciistr函數的定義
Non-ASCII characters are converted to the form \xxxx, where xxxx represents a UTF-16 code unit.
但是這並不表示以 "\" 開始的字元就是漢字了

舉例如下
SQL> select * from test;

NAME
--------------------
,啊OO10哈
你好aa
大家好aa/
☆大海123
★ABC

這里第5條記錄有一個實心的五角星
然後用asciistr函數轉換一下試試
SQL> select name,asciistr(name) from test;

NAME ASCIISTR(NAME)
-------------------- ----------------------
,啊OO10哈 ,\554AOO10\54C8
你好aa \4F60\597Daa
大家好aa/ \5927\5BB6\597Daa/
☆大海123 \2606\5927\6D77123
★ABC \2605ABC

我們看到最後一條記錄的實心五角星也是 "\"開頭的
此時我們就不能用asciistr(欄位)是否存在 "\" 來判斷是否含有漢字了.

我的函數如下,基本思路是判斷字元的編碼是否在GB2312規定的漢字編碼范圍之內
[PHP]
create or replace function get_chinese(p_name in varchar2) return varchar2
as
v_code varchar2(30000) := '';
v_chinese varchar2(4000) := '';
v_comma pls_integer;
v_code_q pls_integer;
v_code_w pls_integer;
begin
if p_name is not null then
select replace(substrb(mp(p_name,1010),instrb(mp(p_name,1010),'ZHS16GBK:')),'ZHS16GBK: ','') into v_code from al where rownum=1;
for i in 1..length(p_name) loop
if lengthb(substr(p_name,i,1))=2 then
v_comma := instrb(v_code,',');
v_code_q := to_number(substrb(v_code,1,v_comma-1));
v_code_w := to_number(substrb(v_code,v_comma+1,abs(instrb(v_code,',',1,2)-v_comma-1)));
if v_code_q>=176 and v_code_q<=247 and v_code_w>=161 and v_code_w<=254 then
v_chinese := v_chinese||substr(p_name,i,1);
end if;
v_code := ltrim(v_code,'1234567890');
v_code := ltrim(v_code,',');
end if;
v_code := ltrim(v_code,'1234567890');
v_code := ltrim(v_code,',');
end loop;
return v_chinese;
else
return '';
end if;
end;
/
.
[/PHP]

好,現在來執行一些語句
SQL> select * from test;

NAME
--------------------
,啊OO10哈
你好aa
大家好aa/
☆大海123
★ABC

5 rows selected.

1. 列出有漢字的記錄
SQL> select name from test where length(get_chinese(name))>0;

NAME
--------------------
,啊OO10哈
你好aa
大家好aa/
☆大海123

4 rows selected.

2. 列出有漢字的記錄,並且只列出漢字

SQL> select get_chinese(name) from test where length(get_chinese(name))>0;

GET_CHINESE(NAME)
---------------------------------------------------------------------------
啊哈
你好
大家好
大海

4 rows selected.

需要說明的是GB2312共有6763個漢字,即72*94-5=6763
我這里是計算72*94,沒有減去那5個,那五個是空的。等查到了再減去
============

改寫這個函數,可以提取非漢字或者漢字
該函數有兩個參數,第一個表示要提取的字元串,第二個是1,表示提取漢字,是非1,表示提取非漢字

[PHP]
create or replace function get_chinese
(
p_name in varchar2,
p_chinese in varchar2
) return varchar2
as
v_code varchar2(30000) := '';
v_chinese varchar2(4000) := '';
v_non_chinese varchar2(4000) := '';
v_comma pls_integer;
v_code_q pls_integer;
v_code_w pls_integer;
begin
if p_name is not null then
select replace(substrb(mp(p_name,1010),instrb(mp(p_name,1010),'ZHS16GBK:')),'ZHS16GBK: ','') into v_code from al where rownum=1;
for i in 1..length(p_name) loop
if lengthb(substr(p_name,i,1))=2 then
v_comma := instrb(v_code,',');
v_code_q := to_number(substrb(v_code,1,v_comma-1));
v_code_w := to_number(substrb(v_code,v_comma+1,abs(instrb(v_code,',',1,2)-v_comma-1)));
if v_code_q>=176 and v_code_q<=247 and v_code_w>=161 and v_code_w<=254 then
v_chinese := v_chinese||substr(p_name,i,1);
else
v_non_chinese := v_non_chinese||substr(p_name,i,1);
end if;
v_code := ltrim(v_code,'1234567890');
v_code := ltrim(v_code,',');
else
v_non_chinese := v_non_chinese||substr(p_name,i,1);
end if;
v_code := ltrim(v_code,'1234567890');
v_code := ltrim(v_code,',');
end loop;
if p_chinese = '1' then
return v_chinese;
else
return v_non_chinese;
end if;
else
return '';
end if;
end;
/

.
[/PHP]
SQL> select * from a;

NAME
--------------------
我們啊、
他(艾呀)是★們
他的\啊@

SQL> select get_chinese(name,1) from a;

GET_CHINESE(NAME,1)
-----------------------------------------
我們啊
他艾呀是們
他的啊

SQL> select get_chinese(name,0) from a;

GET_CHINESE(NAME,0)
-----------------------------------------

()★
\@

SQL>

⑩ oracle 自定義函數處理『過濾掉空格和其他特殊字元函數』怎麼寫

用regexp_replace這個函數根據正則表達式將特殊字元替換成空串

閱讀全文

與oracle過濾掉字元相關的資料

熱點內容
自體血回輸可以用3000洗嗎 瀏覽:620
樹脂透明瓦設備 瀏覽:847
提升泵井作用 瀏覽:336
金魚缸中心過濾器 瀏覽:937
為什麼凈水器過濾後還是很難喝 瀏覽:235
豐源飲水機熱水口出水是什麼原因 瀏覽:309
小佩飲水機濾芯如何復位 瀏覽:314
純水機為什麼要加濃縮水 瀏覽:529
互邦除垢劑 瀏覽:496
青白江中科污水處理 瀏覽:45
機車的機油濾芯在哪裡 瀏覽:359
污水處理油污 瀏覽:785
本田繽智4s店換汽油濾芯多少錢 瀏覽:256
如何正確選用水處理葯劑 瀏覽:268
醫院污水處理在線監測報價 瀏覽:760
小米1代空氣凈化器怎麼手動調速 瀏覽:167
直接排放污水需達到的標准 瀏覽:281
三聚氰胺甲醛樹脂氨基反應 瀏覽:567
污水處理廠怎麼配葯 瀏覽:819
污水處理a2o一體化工藝 瀏覽:120