SQL-запрос, который заменяет нулевые значения.
Вопрос
Мне нужен SQL-запрос, который возвращает ContactDate, SortName, City, ContactType и Summary из приведенных ниже таблиц.Если какое-либо значение равно null, мне нужно, чтобы оно возвращало текст “Нет записи”.
Контактный стол
- Контактный идентификатор
- Дата контакта
- Идентификатор пользователя
- Краткие сведения
- Тип контакта
- Сортировочное имя
Доступный для использования
- Идентификатор пользователя
- Имя
- Фамилия
- Адресат
Адресуемый
- Адресат
- Город
- Улица
- Состояние
- Застежка - молния
Решение
SELECT COALESCE(CAST(CONVERT(VARCHAR(10), ContactTable.ContactDate, 101) AS VARCHAR(10)), 'No Entry') AS ContactDate,
COALESCE(ContactTable.SortName, 'No Entry') AS SortName,
COALESCE(AddressTable.City, 'No Entry') AS City,
COALESCE(ContactTable.ContactType, 'No Entry') AS ContactType
FROM ContactTable
LEFT OUTER JOIN UserTable ON ContactTable.UserID = UserTable.UserID
LEFT OUTER JOIN AddressTable ON UserTable.AddressID = AddressTable.AddressID
Здесь ниже приведена диаграмма форматов SQL DateTime для приведенного выше оператора CONVERT.
Другие советы
КОАЛЕСЦИРОВАТЬ() на любой платформе, которая весит свой вес в пересчете на соль.
Обязательно разберитесь с проблемами кастинга.
Такие , как:
--(SQL Server)
SELECT
C.ContactID,
COALESCE(CAST(CONVERT(varchar(10), C.ContactDate, 101) AS varchar(10), 'No Entry') AS ContactDate,
COALESCE(SorName, 'No Entry') AS SortName
и т.д., и т.п.
SELECT
ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table
Использовать ISNULL довольно просто.
Вызывается версия этой функции для Oracle nvl
.Такое же использование -- SELECT nvl(col_name, desired_value) FROM foo
.
Более общая версия этого такова decode
, который имеет три параметра и позволяет вам указать, для какого значения столбца вы хотите выполнить замену (так что вы можете заменить все 'Johnny' на 'John' или что-то в этом роде).
Используя 'IIF' является решением для базы данных Access, но может работать и в других базах данных.
SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName
Функция IIF возвращает одно из 2 значений, зависящих от вычисления выражения.
Синтаксис SQL:IIF( выражение, истинное значение1, ложное значение)
Вы также можете выполнять разные вызовы для каждого столбца.Для этого потребуется больше отдельных вызовов, но это может быть быстрее, если у вас не так много строк для обновления.
update ContactTable set ContactDate = 'No Entry' where ContactDate is null;
Повторите для каждого столбца.