计算字符串中包含中文、英文字符长度

 

下面这个方法仅用在字符集为固定长度的数据库中:

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

 

你可能感兴趣的:(sql)