我正在尝试使用动态长度显示表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.
答案 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>