Следующий фрагмент кода возвращает 1900-01-01, когда поле DOB имеет значение null. Я хотел (и ожидал), что он возвращает пустую строку (''), но это не так. Как мне продолжить, чтобы получить желаемые результаты?
isnull(convert(date,DOB,1),'')
Следующий фрагмент кода возвращает 1900-01-01, когда поле DOB имеет значение null. Я хотел (и ожидал), что он возвращает пустую строку (''), но это не так. Как мне продолжить, чтобы получить желаемые результаты?
isnull(convert(date,DOB,1),'')
Ответы:
Вы не можете получить пустую строку, потому что вы возвращаете DATE
тип значения из ISNULL
.
По MSDN ,ISNULL
Возвращает тот же тип, что и check_expression. Если в качестве check_expression предоставлен литерал NULL, возвращает тип данных для параметра replace_value. Если литерал NULL предоставляется как check_expression, и не указано значение replace_value, возвращает int.
Если вы проверяете, является ли значение значением NULL
, нет необходимости преобразовывать его в дату, если только вы не хотите вернуть значение даты (которое вам не кажется).
Вместо этого используйте:
SELECT ISNULL( DOB , '')
Который вернется
''
если значение NULL
.
NULL
Дата не является NULL
(нет значения). Пустая строка, с другой стороны, оценивается как 0
, что в SQL Server неявно является целым числом, представляющим количество дней с тех пор 1900-01-01
.
Если вы хотите вернуть значение для DOB, когда оно заполнено, и удалить нулевое значение, если DOB не заполнено. Вы можете попробовать это, но DOB будет varchar, а не типом даты.
isnull(cast(cast(DOB as date)as varchar),'') as DOB (SQL SERVER)
VARCHAR
к a DATE
и обратно к a VARCHAR
не имеет никакого смысла. Когда вы убираете эту ерунду, ваш ответ совпадает с принятым ответом с меньшей экспозицией.
datetime
даты и мне потребовалась только дата YYYY-MM-DD
. Так что, как date
я бросаю время. Затем приведение varchar
позволяет использовать isnull
функцию. Поэтому я все еще получаю дату для заполненных записей и удаляю нулевые значения. В противном случае я получал 1900-01-01 00:00:00.000
.
использование
выберите isnull (Convert (Varchar (500), Date, 106), '')
работает
NULL
датами, говоритSELECT CAST('' AS DATE)
. Какой тип данныхDOB
?