#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')