bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

oracle怎么去除中文字符,oracle去除指定字符

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(dump(p_name,1010),instrb(dump(p_name,1010),'ZHS16GBK:')),'ZHS16GBK: ','') into v_code from dual 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(dump(p_name,1010),instrb(dump(p_name,1010),'ZHS16GBK:')),'ZHS16GBK: ','') into v_code from dual 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數據庫中文亂碼問題

一、pl/sql developer 中文字段顯示亂碼

原因:因為數據庫的編號格式和pl /sql developer的編碼格式不統一造成的。

二、查看和修改oracle數據庫字符集:

select userenv('language') from dual;

查詢結果:

SIMPLIFIED CHINESE_CHINA.AL32UTF8

--修改oracle數據庫字符集:(在SQL Plus中)

sql conn / as sysdba;

sql shutdown immediate;

database closed.

database dismounted.

oracle instance shut down.

sql startup mount;

oracle instance started.

total system global area 135337420 bytes

fixed size 452044 bytes

variable size 109051904 bytes

database buffers 25165824 bytes

redo buffers 667648 bytes

database mounted.

sql alter system enable restricted session;

system altered.

sql alter system set job_queue_processes=0;

如何利用oracle正則表達式去除字段中含有的漢字

我嘗試著寫了一個,如果都是只在前后有中文,那么這個應該可以。你試試,我這里可沒有環境去測試。

SELECT regexp_substr(changpai, '[[:alnum:]]+') FROM huishou.dx_new_car;

網頁名稱:oracle怎么去除中文字符,oracle去除指定字符
本文路徑:http://vcdvsql.cn/article6/hegpig.html

成都網站建設公司_創新互聯,為您提供面包屑導航網站策劃營銷型網站建設網站改版手機網站建設網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設