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

Откуда:
Сообщений: 2
Доброго времени суток всем,
никак не получается составить запрос без ошибок. Пытаюсь по-разному конвертировать (последняя строка), но все не получается. Поле RESULT_APPROVE_FK_TIME имеет такой формат: (datetime, null), выглядит так: 2014-07-29 00:00:00.000. Поле dtvl18 имеет такой формат: (decimal (8,0), null) и выглядит так: 20140723. Что я ни пытался сделать (cast, convert) - все время получаю ошибку.
Ниже приводится запрос с последней строкой в ее последней реинкарнации (в этом случае выдает ошибку Conversion failed when converting date and/or time from character string). Есть ли у кого-нибудь идеи, как исправить?
Спасибо!

Select cast(RESULT_APPROVE_FK_TIME as date) as RESULT_APPROVE_FK_TIME, dtvl18

from #a1

left join #b1

on ADNR18=PATIENT_ID

and INST18=isuf_lab

and STNR18=request_number

and RESULT_APPROVE_FK_TIME = convert (datetime, cast (dtvl18 as nvarchar(8)), 103)
19 окт 14, 15:38    [16727601]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server: функция convert постоянно выдает ошибку Conversion failed when converting...  [new]
aleks2
Guest
declare @dtvl18 decimal(8,0) = 20140723

select @dtvl18
     , DATEADD(YEAR, @dtvl18/10000 - 1900, 0)
     , DATEADD( month, (@dtvl18%10000)/100 - 1, DATEADD(YEAR, 20140723/10000 - 1900, 0) )
     , DATEADD( day, (@dtvl18%100) - 1, DATEADD( month, (@dtvl18%10000)/100 - 1, DATEADD(YEAR, 20140723/10000 - 1900, 0) ) )
19 окт 14, 16:24    [16727710]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server: функция convert постоянно выдает ошибку Conversion failed when converting...  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
yanm
Доброго времени суток всем,
никак не получается составить запрос без ошибок. Пытаюсь по-разному конвертировать (последняя строка), но все не получается. Поле RESULT_APPROVE_FK_TIME имеет такой формат: (datetime, null), выглядит так: 2014-07-29 00:00:00.000. Поле dtvl18 имеет такой формат: (decimal (8,0), null) и выглядит так: 20140723. Что я ни пытался сделать (cast, convert) - все время получаю ошибку.
Ниже приводится запрос с последней строкой в ее последней реинкарнации (в этом случае выдает ошибку Conversion failed when converting date and/or time from character string). Есть ли у кого-нибудь идеи, как исправить?
Спасибо!

Select cast(RESULT_APPROVE_FK_TIME as date) as RESULT_APPROVE_FK_TIME, dtvl18

from #a1

left join #b1

on ADNR18=PATIENT_ID

and INST18=isuf_lab

and STNR18=request_number

and RESULT_APPROVE_FK_TIME = convert (datetime, cast (dtvl18 as nvarchar(8)), 103)
Почему 103, если 112? Который сервер преобразует по-умолчанию в дату без явного CAST/CONVERT.
В строку преобразует и функция STR: STR(dtvl18)
19 окт 14, 16:33    [16727728]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server: функция convert постоянно выдает ошибку Conversion failed when converting...  [new]
yanm
Member

Откуда:
Сообщений: 2
aleks2,
прошу прощения за невежество, 20140723 - это только пример формата даты. Что необходимо написать, чтобы преобразовывалась вся колонка с этим форматом?
Спасибо!
19 окт 14, 17:20    [16727815]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server: функция convert постоянно выдает ошибку Conversion failed when converting...  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
автор
Что я ни пытался сделать (cast, convert) - все время получаю ошибку.

Очевидно, Вы программируете "методом тыка", а не методом знаний.

declare @n decimal (8,0) = 20140723
select cast(cast(@n as char) as datetime)


Как видно, CAST() прекрасно работает.
decimal(), кстати, совершенно неуместно.
20 окт 14, 11:22    [16729895]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server: функция convert постоянно выдает ошибку Conversion failed when converting...  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Так короче:
declare @n decimal (8,0) = 20140723
select CAST(STR(@n)AS DATETIME);
Причём CAST тут лишний.
20 окт 14, 11:27    [16729926]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server: функция convert постоянно выдает ошибку Conversion failed when converting...  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
iap, суть примера была в том, чтобы показать автору, что CAST(), который он использовал и забраковал, прекрасно работает.
Понятно, что можно полагаться на автоматические преобразование типов.
20 окт 14, 11:44    [16730022]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить