Oracle 如何获取sqlcl中字符串的长度

Oracle 如何获取sqlcl中字符串的长度,oracle,char,string-length,sqlcl,Oracle,Char,String Length,Sqlcl,我试图根据名称中字符串的长度显示前三行。但是系统只读取字符串列的预定义长度,而不是列中的字符串 SQL> select max(length(name)) from cus_detail; 这就是CHARdatatype所做的-它用空格右键填充值,直到整列长度: SQL> create table test (name char(10)); Table created. SQL> insert into test (name) values ('London'); 1

我试图根据名称中字符串的长度显示前三行。但是系统只读取字符串列的预定义长度,而不是列中的字符串

SQL> select max(length(name)) from cus_detail;

这就是
CHAR
datatype所做的-它用空格右键填充值,直到整列长度:

SQL> create table test (name char(10));

Table created.

SQL> insert into test (name) values ('London');

1 row created.

SQL> select max(length(name)) from test;

MAX(LENGTH(NAME))
-----------------
               10

SQL>
近距离观察:

SQL> select '#' || name ||'#' name, dump(name) dmp from test;

NAME         DMP
------------ --------------------------------------------------
#London    # Typ=96 Len=10: 76,111,110,100,111,110,32,32,32,32
       ^^^^                 L  o   n   d   o   n   ^^^^^^^^^^^
       spaces                                      spaces
因此,您可以
trim
该值:

SQL> select max(length(trim(name))) from test;

MAX(LENGTH(TRIM(NAME)))
-----------------------
                      6

SQL>
或者-甚至更好-将列的数据类型更改为
varchar2

SQL> create table test (name char(10));

Table created.

SQL> insert into test (name) values ('London');

1 row created.

SQL> select max(length(name)) from test;

MAX(LENGTH(NAME))
-----------------
               10

SQL>
SQL> select '#' || name ||'#' name, dump(name) dmp from test;

NAME         DMP
------------ --------------------------------------------------
#London    # Typ=96 Len=10: 76,111,110,100,111,110,32,32,32,32
       ^^^^                 L  o   n   d   o   n   ^^^^^^^^^^^
       spaces                                      spaces
SQL> select max(length(trim(name))) from test;

MAX(LENGTH(TRIM(NAME)))
-----------------------
                      6

SQL>