Наступний фрагмент коду повертається 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?