ASCIISTR,ASCII,CHR函数的区别

        今天偶然看到一个函数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函数
        查联机文档原文如下:
        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
=!@#$%^&*~


你可能感兴趣的:(SQL基础)