Получение дополнительных конечных пробелов в каждом столбце при использовании lpad в Oracle

#sql #oracle #plsql #oracle11g #oracle10g

#sql #Oracle #plsql #oracle11g #oracle10g

Вопрос:

Я запускаю запрос ниже, используя сценарий оболочки для получения данных от oracle.

 set heading off;
set COLSEP ",";
set echo off;
set FEEDBACK off;
set pages 0;
set tab off;
set linesize 10000;
SELECT nvl(lpad(ID1,9,' '),'         '),
ID2,
lpad(ID3,11,' '),
nvl(ID4,'         ')
FROM ENTMST.T_DB_ENTITY;
quit;
 

И получение вывода, как показано ниже.

 197329691                           ,197329691,  197329691                                 ,197329691
 

например, 3-й столбец lpad работает нормально для значения 197329691, но после этого я получаю дополнительное пространство. Как я могу их удалить?

Комментарии:

1. каков результат SELECT ID1, ID2, ID3, ID4 FROM ENTMST.T_DB_ENTITY простой проверки нормального вывода

2. Каков тип данных полей идентификатора? CHAR возможно?

3. Тип данных — char(9), а обычный вывод приведен ниже. 197329691,197329691,197329691,197329691

4. @user3760704 Какую СУБД вы используете? запрос кажется правильным.

5. Я запускаю его через команду sqlplus в oracle.

Ответ №1:

Добавьте псевдонимы для каждого столбца:

 SELECT NVL(LPAD(ID1,9,' '),'         ') ID1,
  ID2 ID2,
  LPAD(ID3,11,' ') ID3,
  NVL(ID4,'         ') ID4
FROM ENTMST.T_DB_ENTITY;
 

Установите ширину столбца sql plus перед оператором select:

    COL id1 FORMAT A9
   COL id2 FORMAT A9
   COL id3 FORMAT A9
   COL id4 FORMAT A9
 

Ответ №2:

вы могли бы завернуть его вот так:

 RTRIM( lpad(ID3,11,' '))
 

Комментарии:

1. RTRIM не помогает. получение того же результата.