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

Откуда:
Сообщений: 68
SQL 2005
Есть таблица БД, в которой лежит дата в Varchar.

set dateformat dmy
select convert(datetime,Zn)
from basadmin.dbo.FD

проходит нормально, а:

set dateformat dmy
select convert(datetime,Zn)
from basadmin.dbo.FD f
where convert(datetime,Zn)=convert(datetime,'01.01.2008')

дает ошибку
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting datetime from character string.


В чем проблема ?
2 фев 08, 15:56    [5236439]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
convert(datetime,'01.01.2008',104)
кстати , а почему сразу не хранить дату в datetime ?
2 фев 08, 16:13    [5236463]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
SharedNoob
Member

Откуда:
Сообщений: 68
convert(datetime,'01.01.2008',104)

Не помогает

кстати , а почему сразу не хранить дату в datetime ?

потому что это одна настроечная таблица для многих параметров, и все параметры сохраняются в Zn, то есть там может лежать не только дата, а и какие нибудь текстовые параметры.
В SQL 2000 все было нормально, все работало. Теперь поднял базу данных на SQL 2005 и начались проблемы с конвертацией типов данных.
2 фев 08, 16:35    [5236486]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
1 точное сообщение
2 Смотреть есть мнение ,что в поле ошибка конвертации - дата не правильная для формата dmy
2 фев 08, 17:01    [5236508]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SharedNoob
set dateformat dmy
select convert(datetime,Zn)
from basadmin.dbo.FD f
where convert(datetime,Zn)=convert(datetime,'01.01.2008')
1. Зачем преобразовывать в datetime, если можно сравнивать строки?
2. Зачем set dateformat??
3. Приведите несколько примеров значений Zn
2 фев 08, 17:08    [5236516]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
А так работает?
select convert(datetime,Zn,104)
from basadmin.dbo.FD f
where convert(datetime,Zn,104)='2008';
2 фев 08, 17:18    [5236520]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
SharedNoob
Member

Откуда:
Сообщений: 68
1 точное сообщение

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting datetime from character string.


2 Смотреть есть мнение ,что в поле ошибка конвертации - дата не правильная для формата dmy

Все значения в данный момент одинаковы и равны '01.01.2007' (без ковычек), я повторюсь,
select convert(datetime,Zn)
from basadmin.dbo.FD
проходит без ОШИБКИ!

Зачем set dateformat??

Пробовал что бы задать формат даты ДД.ММ.ГГГГ

автор
А так работает?
select convert(datetime,Zn,104)
from basadmin.dbo.FD f
where convert(datetime,Zn,104)='2008';

Так ошибки не валит

.................................
+ если написать не
convert(datetime,Zn)=convert(datetime,'01.01.2008')
а
isdate(rtrim(Zn))=1 then convert(datetime,rtrim(Zn)) else convert(datetime,rtrim(Zn)) end
то ошибки нету. не пойму в чем дело ..
2 фев 08, 17:38    [5236545]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
SharedNoob
Member

Откуда:
Сообщений: 68
а точнее
isdate(rtrim(Zn))=1 then convert(datetime,rtrim(Zn)) else convert(datetime,rtrim(Zn)) end = convert(datetime,'01.01.2008')
2 фев 08, 17:40    [5236548]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
SharedNoob
Member

Откуда:
Сообщений: 68
ТОже не полностью написал, вообщем вот так
select convert(datetime,Zn)
    from basadmin.dbo.FD f
    Where Case when isdate(rtrim(Zn))=1 then convert(datetime,rtrim(Zn)) else convert(datetime,rtrim(Zn)) end = convert(datetime,'01.01.2008')
2 фев 08, 17:47    [5236556]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
SharedNoob
Member

Откуда:
Сообщений: 68
Но почему валиться ошибка при простом конвертировании типа ?
2 фев 08, 17:48    [5236557]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
>Но почему валиться ошибка при простом конвертировании типа ?

чудеса. а basadmin.dbo.FD - это точно таблица, не представление (view) какое-нибудь?
зы: а еще вы @@version не показывали...

Posted via ActualForum NNTP Server 1.4

2 фев 08, 17:58    [5236574]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
DiMamont
Member

Откуда: Москва
Сообщений: 163
Не вяснили в чем ошибка, у меня точно такая же проблема, элементарные запросы все нормально, с форматами все нормально, а как добавляешь сравнение или ещё каким-то образом усложняешь запрос, то сразу ошибка.
Причем появилось это при переносе базы с SQL 2000 на SQL 2005
Не нашлось ли каких-то объяснений?
11 сен 08, 15:37    [6174496]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
DiMamont
Не вяснили в чем ошибка, у меня точно такая же проблема, элементарные запросы все нормально, с форматами все нормально, а как добавляешь сравнение или ещё каким-то образом усложняешь запрос, то сразу ошибка.
Причем появилось это при переносе базы с SQL 2000 на SQL 2005
Не нашлось ли каких-то объяснений?

Есть вариант, что в условии where входной параметр строка, которая не преобразется к дате? ведь её же сначала надо просмотреть можно ли её выбирать, а там может быть всё что угодно. При отображении у вас всё время даты, а при формировании обработки условия могут быть любые значения.
Можете написать свою функцию, которая вернёт вам null, например, если нельзя сконвертить в дату, но у меня не получилось обработать эту ошику при помощи TRY convert EXCEPT. Можите попробывать вызвать исключение, которое может быть обработается, ...
11 сен 08, 16:57    [6175207]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
DiMamont
Не вяснили в чем ошибка, у меня точно такая же проблема, элементарные запросы все нормально, с форматами все нормально, а как добавляешь сравнение или ещё каким-то образом усложняешь запрос, то сразу ошибка.
Причем появилось это при переносе базы с SQL 2000 на SQL 2005
Не нашлось ли каких-то объяснений?
Приведите СВОЙ неработающий пример.
А вообще, смысл в том, что CASE всегда выполняется в порядке появления условий в WHEN, причём оставшиеся (после подходящего WHEN) условия не проверяются. Следовательно, достаточно в первом WHEN проверить строку функцией ISDATE().
Условия в JOINах и в WHERE оптимизатор может менять местами, распараллеливать и т.д. Поэтому в любом случае может выполняться преобразование некорректной строки в дату с сообщением об ошибке конвертирования.
Если же строка точно соответствует какому-либо из поддерживаемых форматов, то явно достаточно задать номер этого формата в третьем параметре функции CONVERT.
11 сен 08, 17:04    [6175263]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Conversion failed when converting datetime from character string  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
если кому-то поможет, как я вышел из положения.

Изначально было так
DECLARE @week char(7), @data_1 DATE, @data_2 DATE

SET @data_1 = '18-02-2013'
SET @data_2 = '24-02-2013'
SET @week = '2013_08'


вываливалась ошибка конвертации в строке 3
Сообщение 241, уровень 16, состояние 1, строка 3
Conversion failed when converting date and/or time from character string.


поменял местами год и день, был формат ДД-ММ-ГГГГ, привел к формату ГГГГ-ММ-ДД, и все заработало.

DECLARE @week char(7), @data_1 DATE, @data_2 DATE

SET @data_1 = '2013-02-18'
SET @data_2 = '2013-02-24'
SET @week = '2013_08'


версия SQL 2008 R2
27 фев 13, 18:03    [13990491]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
осспаде
Guest
О сколько нам открытий чудных. Готовит просвещенья дух.
а еще можно для себя открыть "языконезависимый формат" и "формат iso 8601"
27 фев 13, 18:22    [13990609]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
осспаде
О сколько нам открытий чудных. Готовит просвещенья дух.
а еще можно для себя открыть "языконезависимый формат" и "формат iso 8601"
Для типа DATE формат 'yyyy-mm-dd' является "языконезависимым", как Вы говорите.
Зачем бы откапывать древнюю тему - вот что непонятно.
Тогда ни у кого типа DATE не было...
27 фев 13, 20:22    [13991011]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
where convert

Это величайшее зло. Избавьтесь от него навсегда.
27 фев 13, 20:46    [13991062]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15006
У меня скуль после установки на новый сервер перестал понимать 'yyyy-MM-dd'.
Говорит:
Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.

Я в шоке. Был всегда уверен, что это формат языконезависим. А тут, если у меня число месяца будет меньше 12, то введя дату по привычке, я получу неверные данные. А где это менять, совсем забыл. Где?
ЗЫ SQL Server 2008 R2 10.50.2500
ЗЗЫ дату я просто пишу в MSSMS
17 фев 14, 12:54    [15576641]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
Glory
Member

Откуда:
Сообщений: 104751
Flying-home
У меня скуль после установки на новый сервер перестал понимать 'yyyy-MM-dd'.

И как это выглядит ?
17 фев 14, 12:56    [15576656]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15006
Glory
Flying-home
У меня скуль после установки на новый сервер перестал понимать 'yyyy-MM-dd'.

И как это выглядит ?

select convert(datetime,'2014-02-17')

Msg 242, Level 16, State 3, Line 1
Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.
17 фев 14, 13:02    [15576695]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Flying-home
У меня скуль после установки на новый сервер перестал понимать 'yyyy-MM-dd'.
Говорит:
Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.

Я в шоке. Был всегда уверен, что это формат языконезависим. А тут, если у меня число месяца будет меньше 12, то введя дату по привычке, я получу неверные данные. А где это менять, совсем забыл. Где?
ЗЫ SQL Server 2008 R2 10.50.2500
ЗЗЫ дату я просто пишу в MSSMS
Этот формат годится для типа DATE, для которого распознаётся однозначно и автоматически. Для остальных типов зависит от языка и SET DATEFORMAT.
http://msdn.microsoft.com/ru-ru/library/ms180878(v=sql.100).aspx
17 фев 14, 13:04    [15576706]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Flying-home
Glory
пропущено...

И как это выглядит ?

select convert(datetime,'2014-02-17')


Msg 242, Level 16, State 3, Line 1
Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.
Не пишите никогда эти минусы в дате.
И ВСЕГДА всё будет восприниматься сервером правильно
17 фев 14, 13:05    [15576719]     Ответить | Цитировать Сообщить модератору
 Re: Conversion failed when converting datetime from character string  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15006
iap
Flying-home
пропущено...

select convert(datetime,'2014-02-17')


Msg 242, Level 16, State 3, Line 1
Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.
Не пишите никогда эти минусы в дате.
И ВСЕГДА всё будет восприниматься сервером правильно

Спасибо. Посмотрел, в свойствах логина стоял язык рашн.
17 фев 14, 13:54    [15577038]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить