lengthb 函数和 length 函数

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                                           上海

你可能感兴趣的:(Development)