各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:
①全角字符的判断,或者是含有汉字的字符串的判断
本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力。
一.2.2 实验环境介绍
11.2.0.3 RHEL6.5
一.2.3 本文简介
看到网友问,怎么查询表中某个字段数据是不是包含了全角字符啊? 这个问题涉及到几个个函数:to_single_byte、length和lengthb,我之前做开发的时候研究的是如何判断一个字符串中是否包含中文,其实和这个本质是一样的,且看实验部分。
一.3 实验部分
一.3.1 lengthb和length函数结合to_single_byte函数
---含有汉字,严格的说是含有全角字符
SELECT l.name
,
length
(
l.name
),
lengthb
(
l.name
)
FROM xb_link l
WHERE length
(
l.name
)
!=
lengthb
(
l.name
)
AND length
(
l.name
)
<
20
;
以下数据也满足条件:
SELECT l.id
,
l.name
FROM xb_link l
WHERE length
(
l.name
)
!=
lengthb
(
l.name
)
AND l.metacategory IN
(
'com.gxlu.ngrm.network.DDNCircuit'
,
'com.gxlu.ngrm.network.FRCircuit'
,
'com.gxlu.ngrm.network.ATMCircuit'
,
'com.gxlu.ngrm.network.DDNOCircuit'
,
'com.gxlu.ngrm.network.FROCircuit'
)
AND l.id IN
(
'301898331'
,
'301898335'
,
'301908187'
,
'301929403'
);
所以可以借助to_single_byte函数来解决。
SELECT l.id
,
l.name
,
to_single_byte
(
l.name
),
length
(
l.name
)
l1
,
lengthb
(
l.name
)
l2
,
length
(
to_single_byte
(
l.name
))
l
FROM xb_link l
WHERE length
(
l.name
)
!=
lengthb
(
l.name
)
AND l.metacategory IN
(
'com.gxlu.ngrm.network.DDNCircuit'
,
'com.gxlu.ngrm.network.FRCircuit'
,
'com.gxlu.ngrm.network.ATMCircuit'
,
'com.gxlu.ngrm.network.DDNOCircuit'
,
'com.gxlu.ngrm.network.FROCircuit'
)
AND l.id IN
(
'301898331'
,
'301898335'
,
'301908187'
,
'301929403'
);
一.3.2 regexp_replace --替换其它字符为’’
SELECT
l.id
,
l.name
FROM xb_link l
WHERE regexp_replace
(
TRIM
(
l.name
),
'([A-Za-z0-9]|[[:punct:]]|[[:space:]])'
,
''
)
IS NOT NULL;
一.3.3 to_multi_byte 函数--全是全角字符
---全是汉字
SELECT l.name
,
to_multi_byte
(
l.name
)
FROM xb_link l
WHERE l.name
=
to_multi_byte
(
l.name
);
SELECT l.name
,
to_multi_byte
(
l.name
)
FROM xb_link l;
一.3.4 网友问题解答:某个字段数据是不是包含了全角字符?
drop table aa
;
create table aa
(
col varchar2
(255));
SELECT
*
FROM aa for update
;
SELECT a.col
,
to_single_byte
(
a.col
),
length
(
a.col
),
lengthb
(
a.col
),
length
(
to_single_byte
(
a.col
)),
lengthb
(
to_single_byte
(
a.col
))
FROM aa a
WHERE
(
lengthb
(
a.col
)
-
length
(
a.col
))
<>
(
lengthb
(
to_single_byte
(
a.col
))
-
length
(
to_single_byte
(
a.col
)));
一.4 总结
方法很简单,网友可能还有其他的办法,欢迎留言,对于不同的场景处理方式有很多种,我们应该学会灵活变通。
一.5 About Me
...........................................................................................................................................................................................
本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
ITPUB BLOG:
http://blog.itpub.net/26736162
本文地址:
http://blog.itpub.net/26736162/viewspace-1688209/
本文pdf版:
http://yunpan.cn/QCwUAI9bn7g7w
提取码:af2d
QQ:642808185 若加QQ请注明你所正在读的文章标题
创作时间地点:2015-06-05 10:00~ 2015-06-05 13:00 于外汇交易中心
...........................................................................................................................................................................................
本文转自lhrbest 51CTO博客,原文链接:http://blog.51cto.com/lhrbest/1658869
,如需转载请自行联系原作者
通过Oracle识别字符串中的中文or字母or数字来介绍全角半角转换函数(to_multi_byte/to_single_byte)在varchar/clob中的使用案例
在日常处理数据的过程中,大家肯定会遇到很多奇奇怪怪的字符,然后还要对这些字符处理,比如***你有个需求:识别字符串中的中文或是识别字母或是识别数字,甚至都识别出来然后剔除or保留某些字符汉字或数字***。
你去百度了一下相关问题,然后得到的结果大都是用正则 '\4E00' and '\9FA5'来识别中文范围用a-zA-z或0-9或[:digit:][:alpha:]来识别字母或数字。但是如果你的字符串中包含全角字符,那这样是识别不全的!!!那怎么做才能够正确的识别中文、字母、数字呢???那就要考虑先做全半
Oracle截取JSON字符串内容1 CREATE OR REPLACE FUNCTION PLATFROM.parsejsonstr(p_jsonstr varchar2,startkey varchar2,endkey varchar2) RETURN VARCHAR2 2 IS 3 rt...
可以有2种办法来判断,第一种办法为REPLACE加TRANSLATE函数,在程序中可以直接使用“TRANSLATE(REPLACE('入参','.',''),'/1234567890','/') IS NULL”来判断入参为数字,缺点是,若入参有2个小数点或含有加减号则不能判断。
Oracle 一个中文汉字 占用几个字节,要根据Oracle中字符集编码决定
查看oracle server端字符集
select userenv('language') from dual;
如果显示如下,一个汉字占用两个字节
SIMPLIFIED CHINESE_CHINA.