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

Мне нужен SQL-запрос, который возвращает ContactDate, SortName, City, ContactType и Summary из таблиц ниже. Если какое-либо значение равно нулю, мне нужно, чтобы оно вернуло текст «Нет записи».

КонтактыТаблица

  • ContactID
  • КонтактДата
  • ID пользователя
  • Резюме
  • Тип контакта
  • SortName

Таблица пользователей

  • ID пользователя
  • Имя
  • Фамилия
  • AddressID

AddressTable

  • AddressID
  • Город
  • улица
  • Состояние
  • Почтовый индекс

MS SQL 2000 в конечном итоге переходит на Crystal Reports 8.0

Solracnapod 17.10.2008 01:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
1
17 757
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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.

Это вызовет исключения для даты.

Pittsburgh DBA 16.10.2008 02:24

SELECT 
  ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table

Использовать ISNULL довольно просто.

Этот код выйдет из строя, если ContactDate имеет значение null. «Ошибка преобразования при преобразовании даты и времени из символьной строки». Вам нужно привести к varchar.

Matt Hamilton 16.10.2008 02:38

COALESCE () на любой платформе, которая на вес соли.

Обязательно решите проблемы с трансляцией.

Такие как:

--(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

и т.д. и т.п.

На данный момент это единственный ответ, который учитывает тот факт, что вам нужно вернуть столбцы, отличные от varchar, в varchar для использования с coalesce / isnull.

Matt Hamilton 16.10.2008 02:28

Вам не хватает близкого парена после второго varchar (10). Мы оба проигрываем из-за разгильдяйства! ;-)

Forgotten Semicolon 16.10.2008 02:58

Да, вот что я получаю, набирая его в поле для ответа :)

Pittsburgh DBA 16.10.2008 03:49

Использование «IIF» является решением для Access DB, но может работать в других DB.

SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName   

Функция IIF возвращает одно из двух значений в зависимости от оценки выражения. Синтаксис SQL: IIF (выражение; истинное значение1; ложное значение)

Версия этой функции Oracle называется nvl. То же использование - SELECT nvl(col_name, desired_value) FROM foo.

Более общая версия этого - decode, который имеет три параметра и позволяет вам указать, какое значение столбца вы хотите заменить (чтобы вы могли заменить все «Johnny» на «John» или что-то в этом роде).

Вы также можете делать разные вызовы для каждого столбца. Потребуется больше индивидуальных вызовов, но это может быть быстрее, если у вас не так много строк для обновления.

update ContactTable
set ContactDate = 'No Entry'
where ContactDate is null;

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

Другие вопросы по теме