cx+oracle+sql含中文,sql 判断字段值是是否包含中文字符
在itpub上看到了這個方法,我想修改一下,修改后如下
從表里提取漢字, 需要考慮字符集, 不同的字符集漢字的編碼有所不同
這里以GB2312為例, 寫一函數準確地從表里提取簡體漢字.
假設數據庫字符集編碼是GB2312, 環(huán)境變量(注冊表或其它)的字符集也是GB2312編碼
并且保存到表里的漢字也都是GB2312編碼的
那么也就是漢字是雙字節(jié)的,且簡體漢字的編碼范圍是
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規(guī)定的漢字編碼范圍之內
anbob@ORCL> run
1 create or replace function f_getcn(p_name in varchar2) return varchar2
2 /*****************
3 discriber: 返回中文字符
4 byy:www.anbob.com itpub id: zhangweizhao
5 v_allcode_d 逗號前值
6 v_allcode_b 逗號后值
7 *******************/
8 as
9 v_allcode varchar2(30000) := ”;
10 v_chinese varchar2(4000) := ”;
11 v_allcode_d int;
12 v_allcode_b int;
13 begin
14 if p_name is not null then
15
16 for i in 1..length(p_name) loop
17 if lengthb(substr(p_name,i,1))=2 then
18 select substr(dump(substr(p_name,i,1)),instr(dump(substr(p_name,i,1)),’: ‘)+2) into v_allcode from dual;
19 v_allcode_d := to_number(substrb(v_allcode,1,instr(v_allcode,’,’)-1));
20 v_allcode_b := to_number(substrb(v_allcode,instr(v_allcode,’,’)+1));
21 if v_allcode_d>=176 and v_allcode_d<=247 and v_allcode_b>=161 and v_allcode_b<=254 then
22 v_chinese := v_chinese||substr(p_name,i,1);
23 end if;
24 end if;
25 end loop;
26 return v_chinese;
27 else
28 return '';
29 end if;
30* end;
Function created.
anbob@ORCL> select * from testasc;
ID NAME REMARK
———- ———- ———————————————————–
1 我是anbob
1 我an是的bb
1 anbob
anbob@ORCL> col cn for a20
anbob@ORCL> run
1* select name,f_getcn(name) cn from testasc
NAME CN
———- ——————–
我是anbob 我是
我an是的bb 我是的
anbob
打賞
微信掃一掃,打賞作者吧~
總結
以上是生活随笔為你收集整理的cx+oracle+sql含中文,sql 判断字段值是是否包含中文字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 斜线出现次数,oracle
- 下一篇: linux中如何撤销上次命令,使用git