Следующий фрагмент кода возвращает 1900-01-01, когда поле DOB имеет значение null. Я хотел (и ожидал), что он возвращает пустую строку (''), но это не так. Как мне продолжить, чтобы получить желаемые результаты?
isnull(convert(date,DOB,1),'')
sql-server
sql-server-2012
datetime
Хуан Велес
источник
источник
NULL
датами, говоритSELECT CAST('' AS DATE)
. Какой тип данныхDOB
?Ответы:
Вы не можете получить пустую строку, потому что вы возвращаете
DATE
тип значения изISNULL
.По MSDN ,
ISNULL
Если вы проверяете, является ли значение значением
NULL
, нет необходимости преобразовывать его в дату, если только вы не хотите вернуть значение даты (которое вам не кажется).Вместо этого используйте:
Который вернется
если значение
NULL
.NULL
Дата не являетсяNULL
(нет значения). Пустая строка, с другой стороны, оценивается как0
, что в SQL Server неявно является целым числом, представляющим количество дней с тех пор1900-01-01
.источник
Если вы хотите вернуть значение для DOB, когда оно заполнено, и удалить нулевое значение, если DOB не заполнено. Вы можете попробовать это, но DOB будет varchar, а не типом даты.
источник
VARCHAR
к aDATE
и обратно к aVARCHAR
не имеет никакого смысла. Когда вы убираете эту ерунду, ваш ответ совпадает с принятым ответом с меньшей экспозицией.datetime
даты и мне потребовалась только датаYYYY-MM-DD
. Так что, какdate
я бросаю время. Затем приведениеvarchar
позволяет использоватьisnull
функцию. Поэтому я все еще получаю дату для заполненных записей и удаляю нулевые значения. В противном случае я получал1900-01-01 00:00:00.000
.Это преобразует значение NULL в пространство. Прикладной уровень (Excel) прекрасно обрабатывает пространство
источник
Просто создайте вид
CREATE VIEW test_view
AS
SELECT - случай, когда год (DOB) <= 1900, тогда нулевой конец DOB заканчивается как DOB, sometext, id из теста;
а затем использовать его вместо исходной таблицы: выберите * из test_view
источник
использование
выберите isnull (Convert (Varchar (500), Date, 106), '')
работает
источник