下面这个方法仅用在字符集为固定长度的数据库中:
SQL> WITH STR AS (SELECT 'ABCDE 中文字符串 FG' S FROM DUAL)
2 SELECT
3 LENGTH(S) * 2 - LENGTHB(S) ENG,
4 LENGTHB(S) - LENGTH(S) CHN,
5 LENGTHB(S) * 2 - LENGTH(S) * 2 CHN_B
6 FROM STR;
ENG CHN CHN_B
---------- ---------- ----------
7 5 10
使用类似的方法可以解决一些其他的问题,比如求字符串中数值的长度:
SQL> WITH STR AS (SELECT 'AB12349J;AL20AB' S FROM DUAL)
2 SELECT
3 LENGTH(S) - LENGTH(REPLACE(TRANSLATE(S, '0123456789', '9999999999'), '9')) NUM,
4 LENGTH(REPLACE(TRANSLATE(S, '0123456789', '9999999999'), '9')) NOT_NUM
5 FROM STR;
NUM NOT_NUM
---------- ----------
7 8