今天偶然看到一个函数ASCIISTR,搜了下,似乎没看到有详细介绍这个函数的,所以找到联机文档,研究了一下,和大家分享, 希望对大家有帮助:
一、ASCII函数
ASCII函数,是将字符转成ASCII码的值.
SQL> select ascii('a') from dual;
ASCII('A')
----------
97
SQL> select ascii('A') from dual;
ASCII('A')
----------
65
二、CHR函数
CHR函数,是将ASCII码的值转成字符
SQL> select chr(65) str from dual;
C
-
A
SQL> select chr(97) str from dual;
S
-
a
SQL> select chr(123) str from dual;
S
-
{
三、ASCIISTR函数
查联机文档原文如下:
测试:
drop table emp2;
create table emp2 as select ename from emp where rownum<=2;
insert into emp2 values('张三');
insert into emp2 values('李四');
insert into EMP2 values('=!@#$%^&*~');
commit;
SQL> select asciistr(ename) from emp2;
ASCIISTR(ENAME)
------------------
ADAMS
ALLEN
\5F20\4E09
\674E\56DB
=!@#$%^&*~
可以看出,只要是ASCII码表中有的字符,都是正常显示,没有的,则显示成\xxxx的格式.
如果表中只有中文和英文、数字等字符,则可以用 \ 来判断是否带有中文.
SQL> select ename from emp2 where asciistr(ename) like '%\%';
ENAME
----------
张三
李四
SQL> select ename from emp2 where asciistr(ename) not like '%\%';
ENAME
----------
ADAMS
ALLEN
=!@#$%^&*~
但如果还有其它字符就不行了,因为其它字符也会转成\xxxx的格式,
例如,日语(网上随便搜了个用来测试,不知道什么意思,若冒犯到谁,请告知,我会立即删除)
SQL> select asciistr('にほんご') from dual;
ASCIISTR('にほんご')
--------------------
\306B\307B\3093\3054
如果表中只有中文和其它字符,还有一种方法用来判断是否中文,那就是用length和lengthb,
SQL> select ename from emp2 where length(ename) !=lengthb(ename);
ENAME
----------
张三
李四
SQL> select ename from emp2 where length(ename) =lengthb(ename);
ENAME
----------
ADAMS
ALLEN
=!@#$%^&*~
一、ASCII函数
ASCII函数,是将字符转成ASCII码的值.
SQL> select ascii('a') from dual;
ASCII('A')
----------
97
SQL> select ascii('A') from dual;
ASCII('A')
----------
65
二、CHR函数
CHR函数,是将ASCII码的值转成字符
SQL> select chr(65) str from dual;
C
-
A
SQL> select chr(97) str from dual;
S
-
a
SQL> select chr(123) str from dual;
S
-
{
三、ASCIISTR函数
查联机文档原文如下:
ASCIISTR takes as its argument a string, or an expression that resolves to a string, in any character set and returns an ASCII version of the string in the database character set. Non-ASCII characters are converted to the form \xxxx, where xxxx represents a UTF-16 code unit.
大致意思如下:
ASCIISTR函数,参数是一个字符串,
如果这个字符在ASCII码表中有,则转成ASCII表中的字符,
如果没有,则转成\xxxx格式,xxxx是UTF-16的编码.测试:
drop table emp2;
create table emp2 as select ename from emp where rownum<=2;
insert into emp2 values('张三');
insert into emp2 values('李四');
insert into EMP2 values('=!@#$%^&*~');
commit;
SQL> select asciistr(ename) from emp2;
ASCIISTR(ENAME)
------------------
ADAMS
ALLEN
\5F20\4E09
\674E\56DB
=!@#$%^&*~
可以看出,只要是ASCII码表中有的字符,都是正常显示,没有的,则显示成\xxxx的格式.
如果表中只有中文和英文、数字等字符,则可以用 \ 来判断是否带有中文.
SQL> select ename from emp2 where asciistr(ename) like '%\%';
ENAME
----------
张三
李四
SQL> select ename from emp2 where asciistr(ename) not like '%\%';
ENAME
----------
ADAMS
ALLEN
=!@#$%^&*~
但如果还有其它字符就不行了,因为其它字符也会转成\xxxx的格式,
例如,日语(网上随便搜了个用来测试,不知道什么意思,若冒犯到谁,请告知,我会立即删除)
SQL> select asciistr('にほんご') from dual;
ASCIISTR('にほんご')
--------------------
\306B\307B\3093\3054
如果表中只有中文和其它字符,还有一种方法用来判断是否中文,那就是用length和lengthb,
length表示字符的长度, lengthb表示字节的长度,
ASCII码表中有的字符,字符和字节都是1个长度,
中文则不一样,中文一个字符根据字符集不同,可以占2个字节,3个字节,甚至4个字节,所以,字符长度和字节长度不相等,就是有中文.
SQL> select ename from emp2 where length(ename) !=lengthb(ename);
ENAME
----------
张三
李四
SQL> select ename from emp2 where length(ename) =lengthb(ename);
ENAME
----------
ADAMS
ALLEN
=!@#$%^&*~