SQL-запрос, который заменяет нулевые значения.

StackOverflow https://stackoverflow.com/questions/206735

  •  03-07-2019
  •  | 
  •  

Вопрос

Мне нужен 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;

Повторите для каждого столбца.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top