Преобразование пустых полей даты / времени в SQL Server - PullRequest
4 голосов
/ 29 июля 2009

Всякий раз, когда значение равно нулю для этого запроса

SELECT ISNULL(someDateTime,'')
FROM  someTable

результат

someDateTime  
------------
1900-01-01 00:00:00.000

Я хочу, чтобы это было "Нет", поэтому, если я запущу это:

SELECT ISNULL(someDateTime,'No')
FROM  someTable

тогда есть эта ошибка:

Не удалось выполнить преобразование при преобразовании даты и времени из символьной строки.

Как это сделать? Заранее спасибо!

Ответы [ 5 ]

6 голосов
/ 29 июля 2009

Результат выражения должен быть одного типа. Если вам нужна символьная строка (и вы это делаете, поскольку 'Нет' не является DateTime), вам нужно преобразовать дату и время в такую ​​строку:

SELECT ISNULL(cast(someDatetime as varchar(20)), 'No') FROM someTable

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

3 голосов
/ 29 июля 2009

isnull() пытается преобразовать второй аргумент в тип данных поля, указанного в первом аргументе.

Если вы собираетесь возвращать строку, вам необходимо привести поле DateTime к типу строки, чтобы isnull() мог работать должным образом - см. ответ Майкла Петротты о том, как это сделать. .

0 голосов
/ 11 января 2011

В вашем обновлении сохраненного процесса: обновите предыдущее значение даты до нового значения Null:

.Parameters.AddWithValue("@Date_Value", Nothing).IsNullable = True
0 голосов
/ 29 июля 2009

Вы не можете так непосредственно. Проще поймать NULL в клиенте и изменить его на «нет».

Однако вы можете использовать значение токена, такое как "17530101", которое является допустимым значением даты / времени, или CONVERT SomeDateTime, сначала varchar.

В противном случае нам нужно больше информации о том, почему и т.д.

0 голосов
/ 29 июля 2009

Вы по-прежнему выбираете столбец DateTime, поэтому результатом этого выражения по-прежнему должно быть значение DateTime, а не строка. Чтобы предложить подходящее решение, нам нужно больше узнать о том, что вы действительно пытаетесь сделать с этими данными.

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