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

Откуда:
Сообщений: 81
Имеется вот такой запрос :

declare @colimnName sysname
set @colimnName = 'val'

select ROW_NUMBER() OVER(ORDER BY case when @colimnName = 'val' then cast(sss.val as varchar)
							    when @colimnName = 'date_val' then cast(sss.date_val as datetime)													
						     end ), val, date_val
from
(
select 'vall' as val, dateadd(day, 1, getdate()) as date_val 
union 
select 'val2' as val, dateadd(day, 2, getdate())
) sss


Результат после попытки выполнения - ошибка:

Conversion failed when converting date and/or time from character string.

Вопрос - почему ?

Запрос чуть утрирован, привёл ради примера.
20 авг 14, 11:39    [16467022]     Ответить | Цитировать Сообщить модератору
 Re: Непонятная ошибка с "case when..."  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
Nakeshi
Результат после попытки выполнения - ошибка:

Conversion failed when converting date and/or time from character string.

Вопрос - почему ?
Видимо, cast(sss.val as varchar) для каких то значений нельзя сконвертировать в тип datetime?
20 авг 14, 11:44    [16467070]     Ответить | Цитировать Сообщить модератору
 Re: Непонятная ошибка с "case when..."  [new]
guest1978
Guest
Nakeshi,

Надо приводить к одному типу
cast(sss.date_val as datetimevarchar(20))
20 авг 14, 11:45    [16467078]     Ответить | Цитировать Сообщить модератору
 Re: Непонятная ошибка с "case when..."  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
@colimnName = 'val'
По моему мнению сюда вообще "заходить" не должно
when @colimnName = 'date_val'


Почему вообще идёт попытка преобразовывать чтото в datetime ?
20 авг 14, 11:47    [16467102]     Ответить | Цитировать Сообщить модератору
 Re: Непонятная ошибка с "case when..."  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
Nakeshi
Почему вообще идёт попытка преобразовывать чтото в datetime ?
Потому что документацию надо читать:
Выражение CASE (Transact-SQL)
Возвращает выражение с наивысшим приоритетом из набора выражений result_expressions и необязательного выражения else_result_expression
20 авг 14, 11:56    [16467195]     Ответить | Цитировать Сообщить модератору
 Re: Непонятная ошибка с "case when..."  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Nakeshi
@colimnName = 'val'
По моему мнению сюда вообще "заходить" не должно
when @colimnName = 'date_val'



Почему вообще идёт попытка преобразовывать чтото в datetime ?
Потому что сначала все операнды приводятся к одному типу данных с самым высоким приоритетом.
Приоритет типов данных (Transact-SQL)
20 авг 14, 11:58    [16467217]     Ответить | Цитировать Сообщить модератору
 Re: Непонятная ошибка с "case when..."  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
iap
Потому что сначала все операнды приводятся к одному типу данных с самым высоким приоритетом.
Приоритет типов данных (Transact-SQL)



Ясно, спасибо
20 авг 14, 12:05    [16467293]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить