導航:首頁 > 凈水問答 > oracle過濾非漢字

oracle過濾非漢字

發布時間:2021-02-16 05:07:41

Ⅰ Oracle 判斷輸入是否是漢字

判斷欄位中是否抄包含中文的方法SQL> 查詢所有loginname是漢字的記錄: select * from studentbaseinfo where asciistr(loginname) like '%/%' ; 查詢所有loginname不是漢字的記錄: select * from studentbaseinfo where asciistr(loginname) not like '%/%'; 查詢輸入數據是否包含漢字,是就返回1,不是就返回0;使用 not like正好相反。 select count(1) from al where asciistr('linyb') like '%/%'; select count(1) from al where asciistr('是漢字') like '%/%' ;select count(1) from al where asciistr('inyb) not like '%/%' 其實asciistr只是判斷是否是多位元組,並不能確定一定是漢字,對其他多位元組表示的語言同樣適用。

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

我嘗試著寫了一抄個,如果都是只在前後有中文,那麼這個應該可以。你試試,我這里可沒有環境去測試。
SELECT regexp_substr(changpai, '[[:alnum:]]+') FROM huishou.dx_new_car;

Ⅲ 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中如何查詢某個欄位除了漢字之外還存在其他字元

判斷ansi值

Ⅳ oracle資料庫中判斷非數字並刪除

您可以用正則表達式,語句如下:

select
regexp_replace('1-a111','[^0-9]')
fromal

有問題,請追問。

Ⅵ oracle 用sql查詢某欄位中包含非中文、

select col from tab where (2*length(col))!=lengthb(col);
試試看,不知道能不能,沒運行過

Ⅶ oracle 去掉字元,剩下數字

實現的方法和詳細的操作步驟如下:

1、第一步,新建一個測試表,見下圖,專轉到下面的步驟。

Ⅷ oracle sql 判斷 欄位是否是漢字

1、使用ASCIISTR函數判別

ASCIISTR函數說明:ASCIISTR返回字元的ASCII形式的字元串。非ASCII的字元被轉化為xxxx的形式。使用ASCIISTR函數也是根據非ASCII字元會被轉化這個特性來判別中文字元,只要裡麵包含中文字元,則必定會有xxx這樣的字元。

使用 ASCIISTR(NAME_ONE) LIKE '%\%' 就能判別那些有中文的記錄。如下所示:

SELECT NAME_ONE FROM TEST WHERE ASCIISTR(NAME_ONE) LIKE'%\%'

2、使用CONVERT函數判別

CONVERT函數說明:

CONVERT(inputstring,dest_charset,source_charset)

inputstring:要轉換的字元串

dest_charset:目標字元集

source_charset:原字元集

3、使用函數length和lengthb來判別

使用函數length與lengthb來判別,是基於中文字元佔用2~4個位元組,而ASCII字元佔用一個位元組,那麼對比LENGTH與LENGTHB就會不一樣。這樣就能判別欄位中是否包含中文字元,但是跟ASCIISTR一樣,如果裡面的非ASCI字元包含非中文,它一樣不能判別。依然有取巧嫌疑。

SELECT NAME_ONE FROM TEST WHERE LENGTH(NAME_ONE) != LENGTHB(NAME_ONE);

(8)oracle過濾非漢字擴展閱讀

Oracle SQL編寫注意事項:

1、SQL語句用大寫的;因為Oracle總是先解析SQL語句,把小寫的字母轉換成大寫的再執行。

2、數據表最好起別名;因為便於sql優化器快速分析。

3、盡量不要使用 insert into table value(?,?,?,?,?)格式,要指出具體要賦值的欄位。INSERT.....SELECT的效率會有提高。

4、select與from語句之間只定義返回的欄位名,除非返回所有的欄位,盡量不要使用 * 。

5、select欄位名應按照表的欄位物理順序編寫,欄位提取要按照「需多少、提多少」的原則,原因是大批量數據的抽取會影響sql緩存的效率。

6、COUNT(*)也是要避免的,因為Count(*)會對全欄位做聚集。但一般的觀點相反, count(*) 比count(1)稍快 , 當然如果可以通過索引檢索,對索引列的計數仍舊是最快的. 例如 COUNT(EMPNO)。

7、條件中使用or 會引起全表掃描,比較影響查詢效率,盡可能少用或不用,實在不行可以用UNION代替。

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

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

Ⅹ oracle資料庫中 怎麼去掉非漢字的字元,並選擇出2個或3個漢字的 數據

WCL
21

閱讀全文

與oracle過濾非漢字相關的資料

熱點內容
水龍頭過濾墊圈 瀏覽:236
RO反滲透膜是4040還是4080 瀏覽:612
印度沒葯樹脂豐胸嗎 瀏覽:159
小米的空氣凈化器的作用是什麼 瀏覽:654
景區污水處理方案公司 瀏覽:633
特恩潔ro反滲透膜怎麼更換 瀏覽:496
可寶空氣凈化器的濾芯如何保養 瀏覽:55
污水處理廠一般工資多少上海 瀏覽:119
光敏樹脂硬度等級 瀏覽:351
污水處理產生的有毒氣體有哪些 瀏覽:702
離子交換動力學實驗 瀏覽:565
飲水機插座沒電怎麼辦 瀏覽:678
養生壺為什麼不長水垢 瀏覽:549
污水處理廠水質超標應急 瀏覽:427
某城鎮污水處理 瀏覽:284
別墅污水提升泵應該建到哪 瀏覽:986
陽離子交換膜製作方法 瀏覽:297
漢川市鄉鎮自來水水垢多 瀏覽:33
水處理微生物學論文3500字 瀏覽:228
選擇蒸餾瓶應考慮什麼因素6 瀏覽:456