【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/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步