lengthb 函数和 length 函数
lengthb函数计算字节数,length函数记录字符数
首先查看数据库的字符集:
select * from nls_database_parameters;
PARAMETER VALUE
------------------------------------------------------------ ---------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET AL32UTF8
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 11.2.0.1.0
已选择20行。
①首先科普一下, NLS_CHARACTERSET 是数据库字符集, NLS_NCHAR_CHARACTERSET 是国家字符集
Oracle中有两大类字符型数据,VARCHAR2是按照数据库字符集来存储数据。
而NVARCHAR2是按照国家字符集存储数据的。同样,CHAR和NCHAR也一样,一是数据库字符符,一是国家字符集。
②UTF8编码:一个汉字占3个字节。
SQL> select lengthb('鹿晗') from dual;
LENGTHB('鹿晗')
---------------
6
SQL> select length('鹿晗') from dual;
LENGTH('鹿晗')
--------------
2
由于业务中一列应该存储汉字的列,被存入了数字,通过这里我们可以看到如果lengthb和length函数得到的一致的,那么就是存入数字的列。
通过这样的查询条件我们就能够找到错误数据。
SQL> select lengthb('17') from dual;
LENGTHB('17')
-------------
2
SQL> select length('17') from dual;
LENGTH('17')
------------
2
举例:本身brchno存放机构名,但是存的是机构号,通过使用此函数就能够定位错误数据。
SQL> select brchno 机构名, brchna 机构号
2 from a
3 where lengthb(brchno) = length(brchno)
4 and rownum<=5;
机构名 机构号
-------------------------------------------------- --------------------------------------------------------------------------------
07000000 上海
07000000 上海
07000000 上海
07000000 上海
07000000 上海
lengthb 函数和 length 函数
最新推荐文章于 2024-04-17 22:27:23 发布