系统中如果没有对非法输入进行处理那么就会有全角和半角的字符,全角和半角的占用字节也不一样,这会给查询统计的准确性产生影响,
全角和半角指的是输入的英文字母或数字的大小,全角指一个字符占用两个标准字符位置的状态。半角字符是指一字符占用一个标准的字符位置,通常的英文字母、数字键、符号键等
1. 函数语法
TO_MULTI_BYTE
语法: TO_MULTI_BYTE(String)
功能:将字符串中的半角转化为全角
返回:字符串
SQL> select to_single_byte('全角转半角:123test') from dual;
TO_SINGLE_BYTE('全角转半角:1?
------------------------------
全角转半角:123test
SQL>
TO_SINGLE_BYTE
语法: TO_SINGLE_BYTE(String )
功能: 将字符串中的半角转换成全角
返回:字符串
SQL> select to_multi_byte('半角转全角:123test') from dual;
TO_MULTI_BYTE('半角转全角:123T
------------------------------
半角转全角:123test
SQL>
2. 函数比较
不同字符集占用字节可能出现不同的情况,我是在ZHS16GBK的字符集下做测试,
SQL> select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET';
PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_CHARACTERSET ZHS16GBK
字符串长度比较
SQL> SELECT length('123test') FROM DUAL;
LENGTH('123TEST')
------------------------
7
SQL> SELECT length('123test') FROM DUAL;
LENGTH('123TEST')
-----------------
7
字节大小比较
SQL> SELECT vsize('123test') FROM DUAL;
VSIZE('123TEST')
-----------------------
14
SQL> SELECT vsize('123test') FROM DUAL;
VSIZE('123TEST')
----------------
7