導航:首頁 > 凈水問答 > oracle欄位過濾掉漢字

oracle欄位過濾掉漢字

發布時間:2023-01-24 11:56:05

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

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

『貳』 Oracle資料庫欄位某部分亂碼的過濾問題

看一下oracle字元集對不對,regedit 西面software,oracle\NLSLANG有點忘了是不是這個看下這個鍵值是不是zh開頭的。要專過濾的話也簡單,你屬先試試like 「%?%」這個條件能否查出亂碼的數據。如果能查到就用條件 id not in(select id from table where col like「%?%」)

『叄』 oracle中 如何去除漢字

selectto_char(to_date('2013年04月04日','yyyy年mm月dd日'),'yyyymmdd')
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 sql語句把欄位中的某個字元去掉

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

『陸』 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);

(6)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 判斷表欄位里字元串是否含有漢字

兩個方法:
1.用到正則中的regexp_like

個人感覺可能是regexp_like(欄位,'[^[:alphanum:]]')
意思是在欄位中匹配非0-9,a-z,A-Z的欄位,如果能匹配到,那麼可以認為是漢字,否則就不是漢字,當然如果欄位中還包含符號,比如加減號什麼的,那麼那麼可能更麻煩一些。
2.用lengthb,與length比長度。如果二者長度相等,那麼就沒有中文字元(因為中文字元一個佔用兩個位元組)。如果lengthb長度大於length長度,那麼一般就說明裡面存在中文字元。

『捌』 Oracle查詢姓名欄位要過濾掉「(離職)」信息

select*fromt_dp_human_employeealeftjoint_eap_sys_employeebonreplace(a.name,'(離職)','')=b.name


注意到底是 中文的括弧還是英文的括弧,你自己確認。

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

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

『拾』 oracle 去掉字元,剩下數字

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

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

閱讀全文

與oracle欄位過濾掉漢字相關的資料

熱點內容
高壓水清洗污水施工方案 瀏覽:681
西門子變頻器44轉矩提升 瀏覽:31
新疆飲料行業超濾設備 瀏覽:839
軟化水處理離子交換 瀏覽:686
如何減少污水投葯量 瀏覽:504
易語言音頻文件過濾器 瀏覽:790
凈水機超濾膜概念 瀏覽:266
怎麼下載污水管 瀏覽:758
污水中的含氮化合物有哪些 瀏覽:533
EDI樹脂怎樣再生 瀏覽:596
菲浦斯凈水器怎麼代理 瀏覽:397
電廠污水外排怎麼辦 瀏覽:662
手錶指針有水垢 瀏覽:198
中水回用維修公司 瀏覽:505
潮州凈化器怎麼選 瀏覽:988
噴漆廢水中氨氮濃度一般為多少 瀏覽:50
如何測算污水流量 瀏覽:758
怎麼更換轉向助力油濾芯 瀏覽:245
生活污水截污納管的意義 瀏覽:28
電熱壺燒純凈水為什麼有水垢 瀏覽:800