Проблемы с контенцией SQL * PLUS

Это для 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 в свой отдельный столбец "Пациент", но ТАКЖЕ также три других поля, также связанные с ним (обратите внимание, что в "тире" нет разделения).

В принципе, у меня 5 полей. Для простоты позвольте называть их полями "1, 2, 3, 4, 5".

Я хочу объединить ВСЕ их вместе, но ПЕРВОЕ, мне нужно объединить поля 1 и 2. Этот небольшой столбец (поля 1 и 2 вместе) будет называться "Пациент". Затем мне нужно объединить поля 3, 4 и 5 с моей колонкой "Пациент", чтобы все 5 полей были объединены вместе, но только с 4 заголовками.

1 ответ

Вы можете объединить выражения вместе с 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 резервирует место для самого длинного месяца "Сентябрь" (?) в этой модели формата.

Вам также может потребоваться добавить директиву 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

licensed under cc by-sa 3.0 with attribution.