2016-05-27 4 views
-2

Вот часть моего запроса:SQL, если дата имеет нулевое значение, есть пустое VARCHAR, если не нулевая дата новообращенного

CASE 
    WHEN COALESCE(V_CONSTAT_ACTUAL_DATES.ID187, '') = '' 
     THEN ' ' 
     ELSE CONVERT(date, V_CONSTAT_ACTUAL_DATES.ID187) 
END AS 'actualFinish' 

То, что я пытаюсь сделать здесь говорить, если эта дата является нулевой или пустой, то have '' еще преобразовать его в дату, но когда у меня есть нулевое значение, он возвращает 1900-01-01, как получилось?

Я даже пытался использовать CONVERT (varchar, ''), и это ничего не делало?

+0

*** Столбец в результирующем наборе не может быть двух типов данных. *** У вас либо есть тип данных даты, который «не является допустимым значением, либо у вас есть тип данных varchar, t дата. Я не вижу в вашем примере, где вы просто пытаетесь установить дату в NULL, а не в пустой набор. – xQbert

+1

Пустая строка преобразует в 0 при преобразовании в int и 0 отличает к базовой дате 1900-01-01, поэтому я предполагаю, что в этом случае неявное поведение приведения является транзитивным, а пустая строка, переданная в datetime, тоже переходит к этому. –

+1

Какой тип данных вы ожидаете от вывода? Дата или варчар? – xQbert

ответ

2

Углы существуют по причине. NULL - это emptyset, тогда как '' означает то, что было сопоставлено с 0, которое является 1900-01-01 в качестве даты.

Вы можете преобразовать дату в VARCHAR, чтобы обойти это:

CASE WHEN COALESCE(V_CONSTAT_ACTUAL_DATES.ID187, '') = '' THEN ' ' ELSE CONVERT(varchar,CONVERT(date, V_CONSTAT_ACTUAL_DATES.ID187)) END AS 'actualFinish' 

Или лучше практика, чтобы сохранить аннулирует в столбце actualFinish, так что вы можете сохранить тип столбца даты.

Смежные вопросы