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