SQL Server: использование оператора case, чтобы увидеть, является ли дата NULL и возвращает ли она '' - PullRequest
0 голосов
/ 20 июля 2010

В моем операторе select есть столбец, который выглядит следующим образом:

SELECT CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE fu.SentOutDate END

Это возвращает 1900-01-01 00:00:00.000 для тех, которые в противном случае были бы NULL

Я знаю это, потому что когда явведите просто fu.SentOutDate, это выглядит как NULL

Почему это происходит и как я могу просто заставить его вернуть пустое значение?

Ответы [ 6 ]

3 голосов
/ 20 июля 2010

Попробуйте преобразовать дату в строку, чтобы она не пыталась преобразовать '' в дату:

(CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE CONVERT(varchar,fu.SentOutDate) END) 
2 голосов
/ 20 июля 2010

Он преобразует ваш '' в DATETIME, так как ваш другой столбец, который вы вернете, является столбцом datetime.

SELECT CASE WHEN 1=1 THEN '' ELSE GETDATE() END 

даст вам то же значение ...

Вы можете преобразовать это в varchar (32), но я не уверен в последствиях

SELECT CASE WHEN 1=1 THEN '' ELSE CAST(GETDATE() AS varchar(32)) END
1 голос
/ 20 июля 2010

Если вы просто проверяете значения NULL, вы можете попробовать ISNULL () и привести дату в качестве varchar.

SELECT ISNULL (CAST (fu.SentOutDate AS VARCHAR (50)), '') AS SendOutDate ОТ таблицы

1 голос
/ 20 июля 2010

Столбец может возвращать только один тип данных - DATETIME! = String / VARCHAR.

Если вам нужна строка нулевой длины в случае значения NULL, вам нужно явно изменить тип данных, используя CAST / CONVERT , чтобы изменить значение, отличное от NULL, наТип данных VARCHAR / etc.

0 голосов
/ 24 января 2013

Это может работать:

case when ISNULL(convert(varchar, a.rec_dt, 108), '00:00:00')='00:00:00' then ''
     else CAST(rec_dt as varchar) 
0 голосов
/ 21 июля 2010

Похоже, вы отображаете это значение в графическом интерфейсе или клиенте где-то. На мой взгляд, лучше всего конвертировать его из значения NULL там, а не в запросе.

Если вы когда-либо создадите базу данных, которая масштабируется до миллионов пользователей, вам понадобится как можно меньше обработки в базе данных и как можно больше в клиенте. Преобразование даты в символ является ненужной нагрузкой в ​​системе (вычисление символа всегда намного медленнее, чем математика).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...