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>