-3

这适用于 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 连接到它们自己单独的“Patient”列中,但其他三个字段也与之连接(注意“破折号”中没有分隔)。

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

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

4

1 回答 1

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 会为该格式模型中最长的月份名称“September”(?)保留空间。


您可能还需要添加 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
于 2013-08-23T22:46:04.220 回答