导航:首页 > 净水问答 > oracle过滤中文

oracle过滤中文

发布时间:2021-01-09 08:13:22

1. Oracle怎么用正则表达式过滤字段中"非汉字"的所有字符

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

2. 如何利用oracle正则表达式去除字段中含有的汉字

我尝试着写了一抄个,如果都是只在前后有中文,那么这个应该可以。你试试,我这里可没有环境去测试。
SELECT regexp_substr(changpai, '[[:alnum:]]+') FROM huishou.dx_new_car;

3. Oracle数据库字段某部分乱码的过滤问题

看一下oracle字符集对不对,regedit 西面software,oracle\NLSLANG有点忘了是不是这个看下这个键值是不是zh开头的。要专过滤的话也简单,你属先试试like “%?%”这个条件能否查出乱码的数据。如果能查到就用条件 id not in(select id from table where col like“%?%”)

4. oracle数据过滤

||--查询
select * from tbname where b||c in(select b||c from tbname group by b,c having count(1)>1);
--删除可以通过id 也可以通过oracle的内置函数内rowid
delete from tbname where id not in(select id from (
select min(id) id,b,c from tbname group by b,c) aa);
--不明白可以随时问我容 希望采纳

5. oracle查询过滤条件如果......则输出.......否则输出........

CASE
WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

楼主说的是这个吗?

6. cognos8.4 win7系统 oracle11g cognos用Report Studio设计时在过滤器内无法对中文进行过滤

没用cognos,一直在用finereport,觉得很好用,你可以试一下。

7. oracle数据裤表,怎么才能过滤掉我不想要的数据啊

你上面来语句的意思似乎源想查 表中数据项2重复数据中又都满足数据项1 和数据项2的记录。
不太明白你要那些数据。到底是保留这些重复数据中满足条件1和2的,还是不保留。
如:select * from a where 1 and 2 in(select 2 from b group by 2 having count(*)>1)
我写的语句的意思是:在b表中2字段重复数据的2字段和a表中1条件 同时满足的a表中的记录。

8. oracle 自定义函数处理‘过滤掉空格和其他特殊字符函数’怎么写

用regexp_replace这个函数根据正则表达式将特殊字符替换成空串

9. 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>

10. oracle筛选字段的时候有没有什么指令可以选出中文,如图所示,我希望跑出来的结果只有‘你好’,谢谢

只要中文的,比较难,你确定你的表中没有韩文,日文,这就好办啊版!

无论是阿拉伯数字权,还是英文字母,ascii码最大不超过122

select * from tab where ascii(att1)>122; 试试可以吗

如果不考虑性能的话,可以这么做

select * from tab where substr(trim(attr),1,4)=substrb(trim(attr)1,4);

这需要考虑你的数据库字符集,如何是ZHS16GBK的话,2位中文,如果是AL32UTF8,是3位~4位中文

阅读全文

与oracle过滤中文相关的资料

热点内容
净化器吸不出水怎么办 浏览:864
酒厂的污水处理池 浏览:160
唐家沱污水处理厂在哪里 浏览:442
弱酸树脂强酸树脂交换容量 浏览:795
车上用的汽油滤芯是什么 浏览:580
樱花燃气热水器除垢 浏览:56
饮水机喝水有什么坏处 浏览:876
树脂瓦质量好坏到哪里鉴别 浏览:882
RO膜处理废切削液 浏览:116
污水综合利用的建议 浏览:647
樱雪热水器清理水垢的视频 浏览:972
苏州水处理租赁公司 浏览:789
双效废水蒸发器 浏览:584
血液透析水处理ppt免费 浏览:519
雨水提升泵原理图 浏览:533
污水泵电机发热是什么原因 浏览:83
污水管道横穿河道开挖施工方案 浏览:961
哪种树脂在电木板上粘性最强 浏览:370
用什么可以去除锅炉中的水垢 浏览:321
宝沃空气滤芯总成怎么拆装 浏览:332