SQL * PLUS连接问题

时间:2013-08-23 21:43:41

标签: sql oracle

这适用于SQL * PLUS

我有一张桌子“患者”,有5个字段。

CREATE TABLE PATIENT
(PAT_ID         CHAR (4) PRIMARY KEY,
 PAT_NAME       VARCHAR (7),
 ADMITTED       DATE,
 ROOM           CHAR (3),
 DOCTOR         VARCHAR (7));

INSERT INTO PATIENT VALUES
(1001, 'FRED', '30-MAR-07', 101, 'PAYNE');

我想创建一个视图,其输出如下所示:

Patient      Doctor       Room         Admitted    
"-----------------------------------------------"
1001 Fred    Payne        101      March 31, 2007

问题是我想将Pat_name和Pat_ID连接到他们自己独立的“患者”列中,但 ALSO 还有其他三个字段也与它连接(注意'破折号中没有分隔“)。

基本上,我有5个字段。为简单起见,我们称它们为“1,2,3,4,5”字段。

我想将所有这些组合在一起,但是首先,我需要组合字段1和2.这个小列(字段1和2组合)将被称为“患者”。那么,我需要在我的Patient列中连接字段3,4和5,以便所有5个字段现在连接在一起,但只有4个标题。

1 个答案:

答案 0 :(得分:0)

您可以将表达式与Oracle ||连接运算符连接在一起。

要获取间距,可以使用RPAD函数将表达式填充到指定的长度(如果它们更长,则将它们截断为指定的长度)。

COL myline HEADING "Patient      Doctor       Room         Admitted"

SELECT RPAD(p.PAT_ID,5)||RPAD(p.PAT_NAME,8)||RPAD(p.DOCTOR,13)
       ||RPAD(p.ROOM,4)||TO_CHAR(p.ADMITTED,'Month dd, yyyy')
       AS myline
  FROM patient p
 ORDER BY p.PAT_ID

您在线上显示的日期值实际上将格式化为

March     31, 2007

(月份名称中有额外的空格,Oracle在该格式模型中为最长的月份名称'9月'(?)预留空间。


您可能还需要添加一个SQL * Plus指令来指定为列的显示保留的长度,例如:

COL myline FORMAT A48

如果你能使用看起来像这样的东西:

Patient      Doctor       Room   Admitted    
------------ ------------ ------ ------------------
1001 Fred    Payne        101    March     31, 2007

然后是这样的:

COL Patient  FORMAT A13
COL Doctor   FORMAT A13
COL Room     FORMAT A6
COL Admitted FORMAT A21

set lines 41
set feedback off

SELECT RPAD(p.PAT_ID,5)||RPAD(p.PAT_NAME,8) AS "Patient"
     , RPAD(p.DOCTOR,13) AS "Doctor"
     , RPAD(p.ROOM,6) AS "Room"
     , TO_CHAR(p.ADMITTED,'Month dd, yyyy') AS "Admitted"
  FROM patient p
 ORDER BY p.PAT_ID