в oracle можно ли вставить строку в столбец типа данных num? - PullRequest
1 голос
/ 23 апреля 2020

мой набор данных

name     salary
JAY      100
ALI      200
WARREN   500
JOHN     null

Я хочу получить имена и зарплаты людей за моим столом. Однако, если заработная плата равна нулю, я хочу, чтобы появилось слово «нет зарплаты». Я пытался использовать nvl, но тип данных отличается, и он не может быть выполнен. Есть ли возможный способ?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Гордон Линофф показал вам один способ, который будет работать - и очень важно, чтобы вы следовали этому совету, только делайте это в качестве самого последнего шага в разработке вашего отчета.

Еще лучший вариант - оставить один запрос и использовать вашу внешнюю программу (например, SQL* Plus, или SQL Developer, или Toad, или любое используемое вами программное обеспечение для создания отчетов), чтобы показать все, что вам нужно, вместо null.

Например, в SQL* Plus вы можете использовать команду SET (обратите внимание, что это SQL* Plus команда , а не оператор SQL; в частности, Вы не заканчиваете его точкой с запятой.

set null 'no salary'

Вот краткая демонстрация - использование таблицы emp в схеме scott (я использую ее для столбца comm; все зарплаты не являются нулевыми в таблице, но некоторые комиссии являются нулевыми.) Сначала я показываю результаты со значением по умолчанию (ничего не показано для null), затем я показываю, как я запускаю команду SET, а затем повторно запускаю запрос .

Обратите внимание на существенное преимущество этого таким образом: даже если мы добавили «текст» в столбец, ненулевые значения по-прежнему отображаются как числа - это означает, что они по-прежнему отображаются по правому краю. Благодаря решению Гордона Линоффа все в этом столбце считается строкой, поэтому все числа будут выровнены по левому краю, что затруднит чтение столбца.

SQL> select empno, ename, job, sal, comm from scott.emp where deptno = 30;

     EMPNO ENAME      JOB              SAL       COMM
---------- ---------- --------- ---------- ----------
      7499 ALLEN      SALESMAN        1600        300
      7521 WARD       SALESMAN        1250        500
      7654 MARTIN     SALESMAN        1250       1400
      7698 BLAKE      MANAGER         2850
      7844 TURNER     SALESMAN        1500          0
      7900 JAMES      CLERK            950

6 rows selected.

SQL> set null 'no comm'

SQL> select empno, ename, job, sal, comm from scott.emp where deptno = 30;

     EMPNO ENAME      JOB              SAL       COMM
---------- ---------- --------- ---------- ----------
      7499 ALLEN      SALESMAN        1600        300
      7521 WARD       SALESMAN        1250        500
      7654 MARTIN     SALESMAN        1250       1400
      7698 BLAKE      MANAGER         2850 no comm
      7844 TURNER     SALESMAN        1500          0
      7900 JAMES      CLERK            950 no comm

6 rows selected.
1 голос
/ 23 апреля 2020

Вам необходимо преобразовать значение при запросе к столбцу :

select coalesce(to_char(salary), 'no salary')

Не сохранять значение в виде строки. NULL имеет смысл для базы данных. Вы хотите показать это по-другому, когда используете значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...