SQL-запрос с ISNULL не выводит smalldatetime в формат 101

Фрагмент из запроса SQL (с использованием SQL Server 2008 R2):

, CONVERT (VARCHAR(10), s.ENTER_DATE, 101) "Enrollment Start Date"

, CONVERT (VARCHAR(10), (ISNULL(CAST(s.LEAVE_DATE AS VARCHAR(10)), '')) ,101) "Enrollment Drop Date"

Верхняя строка отлично работает для вывода даты в правильном формате 101 (например: 06/22/2012).

Нижняя строка работает так, как нужно для удаления любых пустых значений в пустые, но... для любых значений даты она не выводит эту дату в надлежащий формат 101, вместо этого выводит дату в формате по умолчанию (например: 22 июня 2012 г.).

Я играл с кодом и искал в Интернете, но не могу получить желаемый результат.

Кто-нибудь может предложить решение?

Спасибо!

1 ответ

Решение

Ваше второе выражение оценивается так:

  1. date или же datetime значение преобразуется в строку (используя CAST())

  2. ISNULL() применяется, который возвращает тот же результат (ту же строку), если он не равен NULL.

  3. Строка преобразуется в... строку (используя CONVERT() этот раз).

Итак, как вы можете видеть, вы получаете неправильно отформатированную дату в результате самого внутреннего преобразования.

Вам просто нужно подать заявку ISNULL иначе, я думаю. Вероятно, так:

ISNULL(CONVERT (VARCHAR(10), s.ENTER_DATE, 101), '') "Enrollment Start Date"
Другие вопросы по тегам