在Oracle SQL SELECT中设置连续列的宽度

时间:2013-04-12 14:57:45

标签: sql oracle width

我正在尝试在Oracle中设置连接列的宽度,但我不确定如何实现此目的。

我有类似的东西(简化):

SELECT t.first_name || ' ' || t.family_name "Trainer name"
FROM trainer t

输出如下:

Trainer name                       
------------------------------------
Bill Gates                        
Steve Jobs                           
Isaac Asimov

我试图将列宽限制为18个字符。我试图使用COLUMN

COLUMN t.first_name || ' ' || t.family_name FORMAT A18

但那不起作用。文档说:“如果在COLUMN命令中使用表达式,则必须完全按照SELECT命令中的显示输入expr”。我做错了什么?

2 个答案:

答案 0 :(得分:3)

另一个选项,将输出转换为char(18):

http://sqlfiddle.com/#!4/69410/1

SELECT 
    cast(t.first_name || ' ' || t.family_name as char(18))   as "Trainer name"
FROM trainer t

答案 1 :(得分:1)

您已为列添加别名,因此您必须使用column命令中的别名:

COLUMN "Trainer name" FORMAT A18

SELECT t.first_name || ' ' || t.family_name "Trainer name"
FROM trainer t;

Trainer name
------------------
Bill Gates
Steve Jobs
Isaac Asimov

您可能会发现使用更简单的别名和列标题更清晰,从显示中分离 - 有点 - 功能:

CLEAR COLUMNS
COLUMN trainer_name FORMAT A18 HEADING "Trainer name"

SELECT t.first_name || ' ' || t.family_name AS trainer_name
FROM trainer t;

Trainer name
------------------
Bill Gates
Steve Jobs
Isaac Asimov

无论哪种方式,如果连接值超过18个字符,该值将换行到第二行。为了避免这种情况,你必须substr这个值,这可能也不可取。