Использование ISNULL или COALESCE в столбце даты

#sql #sql-server #ssms

#sql #sql-сервер #ssms

Вопрос:

У меня есть столбец даты, в котором некоторые строки имеют нулевые значения. Я хотел бы использовать ISNULL или что-то подобное, чтобы заменить эти значения чем-то вроде ‘N / A’, однако, когда я пытаюсь использовать ISNULL, я получаю ошибку из-за двух разных типов данных. Если я попытаюсь преобразовать свой столбец Date в VARCHAR, чтобы иметь возможность использовать ISNULL, то способ отображения дат в моем столбце будет искажен. Есть ли какой-либо способ решить эту проблему?

 ISNULL(DateSent, 'N/A')
  

Комментарии:

1. поделитесь своей структурой таблицы

2. Это проблема «уровня представления». Где вы хотите видеть N / A? в отчете?

3. Не используйте ‘N / A’ для значений null и сохраните DateTime (или какой бы ни был ваш текущий тип даты). Если необходимо — создайте представление со строковой датой или ‘N / A’

4. При преобразовании date в varchar вы можете выбрать стиль.

Ответ №1:

Я рекомендую COALESCE() , потому что это стандартно. Однако ваша проблема в том, что первый столбец — это дата / время, и это несовместимо со строкой.

Итак, вам нужно преобразовать значение. Вы можете использовать формат по умолчанию:

 COALESCE(CONVERT(VARCHAR(255), DateSent), 'N/A')
  

Или вы можете добавить аргумент преобразования:

 COALESCE(CONVERT(VARCHAR(255), DateSent, 120), 'N/A')
  

Или вы можете использовать FORMAT() для большей гибкости.

Комментарии:

1. COALESCE(CONVERT(VARCHAR(255), DateSent, 120), ‘N / A’) — это сработало именно так, как мне было нужно, чтобы это работало! Спасибо

2. Этот вопрос и ответ заслуживают еще тысячи голосов «За». Это ИМЕННО то, что я искал.. Браво!

3. SQL Server ISNULL() и COALESCE() не идентичны. itprotoday.com/sql-server /… .

Ответ №2:

Вы можете попробовать это

 Select ISNULL(Cast(DateSent as Varchar(20)), 'N/A')
  

Ниже приведен один пример:

 declare @DateSent date = getdate()
Select ISNULL(Cast(@DateSent as Varchar(20)), 'N/A')
  

Для нулевых значений, как показано ниже.

 declare @DateSent1 date = NULL
Select ISNULL(Cast(@DateSent1 as Varchar(20)), 'N/A')