Rpad里面的子查询

时间:2015-10-18 00:06:57

标签: sql oracle select subquery maxlength

我正在尝试使用动态长度显示表Name中的列GOODCUST,这是名称中最长的值(仅使用最大长度为17)。这可行,但问题是列Name1的名称有一个非常长的长度,我不知道为什么。

select RPAD("Name",(select max(length("Name")) from GOODCUST ))"Name1" 
from  GOODCUST

这是GOODCUST表:

Name
------------------------------
MIKE andd SAM inc.
Black Giant
Mother Goose
BLUE SKY LTD

这是查询的结果:

Name1
--------------------------------------------------------------------------------

Black Giant
Mother Goose
BLUE SKY LTD
MIKE and SAM inc.

这应该是它的样子:

Name1
-----------------

Black Giant
Mother Goose
BLUE SKY LTD
MIKE and SAM inc.

1 个答案:

答案 0 :(得分:0)

您正在使用SQL * Plus(或类似客户端)来运行查询。 SQL * Plus使用数据字典中的元数据来格式化显示。因此"Name"的分配空间将是列的长度。

但是," Name1"列是由查询派生的,它是动态的。客户不知道它会持续多长时间,因此它使用标准的#34;非常长的字符串"长度。

但它只是布局:列的实际长度是我们所期望的......

SQL> select "Name"
  2         , length("Name") lname
  3         , length(RPAD("Name",(select max(length("Name")) from GOODCUST ))) lname1
  4  from  GOODCUST
  5  /

Name                                LNAME     LNAME1
------------------------------ ---------- ----------
MIKE andd SAM inc.                     18         18
Black Giant                            11         18
Mother Goose                           12         18
BLUE SKY LTD                           12         18

SQL> 

如果标题格式化困扰你那么多SQL * Plus都有预先定义它的命令:

SQL> col "Name1" format a18
SQL> select RPAD("Name",(select max(length("Name")) from GOODCUST ))"Name1" 
  2  from  GOODCUST
  3  /

Name1
------------------
MIKE andd SAM inc.
Black Giant
Mother Goose
BLUE SKY LTD

SQL>

请注意,如果您的列格式设置的值小于输出将被包裹的列的最大长度....

SQL> col "Name1" format a14
SQL> /

Name1
--------------
MIKE andd SAM
inc.

Black Giant


Mother Goose


BLUE SKY LTD



SQL>