【DB笔试面试457】如何判断一个字符串是否含有中文汉字?

  • 2019 年 10 月 11 日
  • 筆記

题目部分

如何判断一个字符串是否含有中文汉字?

答案部分 可以利用LENGTH、LENGTHB和TO_SINGLE_BYTE函数来解决这个问题。

其中,LENGTH返回以字符为单位的长度,LENGTHB返回以字节为单位的长度,TO_SINGLE_BYTE将字符串中的多字节字符转化为单字节字符。

此外,还可以使用ASCIISTR和CONVERT函数找出包含汉字的字符串。

若利用LENGTH、LENGTHB和TO_SINGLE_BYTE函数来实现该需求,则类似的WHERE条件为:“LENGTHB(COL) <> LENGTH(COL) AND LENGTHB(TO_SINGLE_BYTE(COL)) <> LENGTH(TO_SINGLE_BYTE(COL))”。

下面给出一个示例,在AA表中插入的“2”是全角字符。

SYS@lhrdb> CREATE TABLE AA (COL   VARCHAR2(255));  Table created.  SYS@lhrdb> INSERT INTO AA (COL) VALUES ('1');  1 row created.  SYS@lhrdb> INSERT INTO AA (COL) VALUES ('2'); --全角字符  1 row created.  SYS@lhrdb> INSERT INTO AA (COL) VALUES ('小麦苗');  1 row created.  SYS@lhrdb> COMMIT;  Commit complete.  SYS@lhrdb> SELECT * FROM AA;  COL  ----------  1  2  小麦苗  SYS@lhrdb> COL COL FORMAT A10  SYS@lhrdb> COL SINGLE_COL  FORMAT A10  SYS@lhrdb> SELECT A.COL COL,    2         TO_SINGLE_BYTE(A.COL) SINGLE_COL,    3         LENGTH(A.COL) LENGTH_COL,    4         LENGTHB(A.COL) LENGTHB_COL,    5         LENGTH(TO_SINGLE_BYTE(A.COL)) SINGLE_LENGTH_COL,    6         LENGTHB(TO_SINGLE_BYTE(A.COL))  SINGLE_LENGTHB_COL    7    FROM AA A    8   WHERE LENGTHB(A.COL) <> LENGTH(A.COL)    9     AND LENGTHB(TO_SINGLE_BYTE(A.COL)) <> LENGTH(TO_SINGLE_BYTE(A.COL));  COL        SINGLE_COL LENGTH_COL LENGTHB_COL SINGLE_LENGTH_COL SINGLE_LENGTHB_COL  ---------- ---------- ---------- ----------- ----------------- ------------------  小麦苗 小麦苗              3           6                 3                  6

& 说明:

有关字符串中是否含义汉字和多字节字符的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-1688209/

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步