2014-02-06 3 views
1

Я новичок в SQL, и эта проблема меня превзошла. Я должен написать инструкцию SQL, в которой перечислены все данные в таблице, но если столбец может содержать значения NULL (в этом случае только одно поле имеет значение NULL), фраза «-NONE-» должна печатать в этом столбце для этого ряд. Лаборатория намекает, что я должен использовать одну или несколько однострочных функций для этого.Замена любых полей NULL строкой

Мы используем Oracle SQL Developer для тестирования скриптов. Я пытаюсь использовать функцию REPLACE, но я продолжаю получать ошибки. Я пробовал использовать NVAL, REPLACE и другие подобные функции, но я явно понимаю синтаксис. Например:

SELECT *, REPLACE(manager_id, NULL, '-NONE-') 
FROM departments; 

^всегда возвращает ошибку: отсутствует FROM инструкции, где ожидается

ответ

4

Функция вы хотите coalesce(). Это стандартная функция ANSI.

Если предположить, что переменная является строка символов:

SELECT d.*, COALESCE(manager_id, '-NONE-') 
FROM departments d; 

Если это не строка, а затем преобразовать его первый:

SELECT d.*, COALESCE(cast(manager_id as varchar(255)), '-NONE-') 
FROM departments d; 
+1

гораздо лучше, чем мой ответ – Barranka

+0

Итак, я пробовал это в обоих направлениях, и я получаю одно и то же ключевое слово FROM, которое не найдено, где ожидалось. Любая идея почему? Следующий код возвращает правую строку со вставленной строкой: SELECT COALESCE (cast (manager_id AS varchar (225)), '-NONE-') Из отделов; Но когда я включаю селектор «*», я получаю это сообщение об ошибке. (Извините за форматирование shitty - новый для этого сайта = /) – user3281385

+0

@ user3281385. , , Некоторые базы данных позволяют использовать '*' и добавлять дополнительные столбцы. Другие требуют, чтобы вы использовали псевдоним таблицы плюс '*'. Вышеизложенное должно работать. –

0

может быть, это может помочь вам:

select 
    *, 
    (case when manager_id is null then '-none-' else manager_id end) as manager_id_2 
from 
    departments 
Смежные вопросы