Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Непонятное поведение MS SQL 2008  [new]
artemius
Member

Откуда:
Сообщений: 265
Здравствуйте всем,

есть запрос

SELECT
*
FROM vw_Result
WHERE LEN(ResultValue) = 10 AND CHARINDEX('-', ResultValue) > 0 AND ISDATE(ResultValue) = 1 AND CAST(ResultValue AS DateTime) <= @Date

суть которого в том, что из набора строк выбираются только те, которые являются датой и сравниваются с параметром @Date типа DateTime. Все строки выбираются вида 'ГГГГ-ММ-ДД', однако SQL Server выдает ошибку Conversion failed when converting date and/or time from character string.

Если же запрос переделать в следующий

SELECT
CAST(ResultValue AS DateTime)
FROM vw_Result
WHERE LEN(ResultValue) = 10 AND CHARINDEX('-', ResultValue) > 0 AND ISDATE(ResultValue) = 1

то происходит прекрасная конвертация строки в дату. Собственно, вопрос, почему такое происходит и как с этим бороться?

Спасибо!
8 июл 09, 18:43    [7393388]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение MS SQL 2008  [new]
Crimean
Member

Откуда:
Сообщений: 13148
особенность сервера. вы не можете определить порядок работы условий. просто учитывайте это
8 июл 09, 18:46    [7393405]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение MS SQL 2008  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
artemius,

придётся так
CAST(CASE ISDATE(ResultValue) WHEN 1 THEN ResultValue END AS DateTime) <=@Date
Кстати, непонятно, а зачем остальные условия в WHERE?

P.S. В особо тяжёлых случаях можно использовать CONVERT с подходящим стилем.
8 июл 09, 20:16    [7393754]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение MS SQL 2008  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> В особо тяжёлых случаях можно использовать CONVERT с подходящим стилем

хрен там. спасает только CASE в "сложных" случаях

case when /*тут блин точно строка в "ТОМ" формате*/
then convert( ...
else NULL
end as Date
8 июл 09, 20:59    [7393822]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение MS SQL 2008  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Crimean
> В особо тяжёлых случаях можно использовать CONVERT с подходящим стилем

хрен там. спасает только CASE в "сложных" случаях

case when /*тут блин точно строка в "ТОМ" формате*/
then convert( ...
else NULL
end as Date
Какой ещё хрен? Где я сказал "спасает"?
8 июл 09, 21:37    [7393883]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить