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

Откуда: Msk
Сообщений: 85
Сабж.
При конвертировании поля StringTime (nvarchar(25)) в datetime происходит следующее.
Если конвертируются таблицы со значениями вида mm/dd/yy hh:mm:ss.000, то все ОК.
Если попадаются таблицы со значениями вида dd/mm/yy hh:mm:ss.000, то вываливаемся в ошибку
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type datetime.

Посоветуйте решение,пожалуйста.
Спасибо.
25 июн 09, 13:45    [7342789]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
Решение - хранить даты в поле типа datetime.
25 июн 09, 13:46    [7342795]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
set dateformat
-------------------------------------
Jedem Das Seine
25 июн 09, 13:47    [7342808]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну а сервер то откуда знает, в каком формате у вас дата в каждой конкретной записи прописана ?
25 июн 09, 13:48    [7342815]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
И кстати, 11/12/09 - это в каком формате дата?
25 июн 09, 13:48    [7342816]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Гавриленко Сергей Алексеевич
Решение - хранить даты в поле типа datetime.

да кабы все так просто было.
Данные из Акцесса поступают. Там вообще разработчики умудрились даты в формате Text хранить. Да и еще в разном виде, чтоб им нехорошо было. Им я уже отписал в саппорт. А проблему все равно решать надо.
25 июн 09, 13:48    [7342817]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Если у вас в столбце вперемешку хранятся разные форматы, решения нет, т.к нет способа узнать, где ddmm, а где mmdd.
25 июн 09, 13:48    [7342820]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
avorsa
Гавриленко Сергей Алексеевич
Решение - хранить даты в поле типа datetime.

да кабы все так просто было.
Данные из Акцесса поступают.

Ну так вот и проверяйте данные в момент их поступления, а не после
25 июн 09, 13:51    [7342845]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
GSerg
Если у вас в столбце вперемешку хранятся разные форматы, решения нет, т.к нет способа узнать, где ddmm, а где mmdd.

в одном столбце данные одного вида
25 июн 09, 13:51    [7342846]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
avorsa
в одном столбце данные одного вида

Значит напишите для каждого столбца отдельную функцию конвертации, которая с помощью SUBSTRING вычленяла бы из разных для каждого столбца мест разные участки даты.

Либо перед каждым актом преобразования выполняйте SET DATEFORMAT под этот столбец.
25 июн 09, 13:56    [7342892]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
avorsa
GSerg
Если у вас в столбце вперемешку хранятся разные форматы, решения нет, т.к нет способа узнать, где ddmm, а где mmdd.

в одном столбце данные одного вида

И вы знаете в какой таблице какой формат используется ?
25 июн 09, 13:57    [7342906]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Glory
avorsa
GSerg
Если у вас в столбце вперемешку хранятся разные форматы, решения нет, т.к нет способа узнать, где ddmm, а где mmdd.

в одном столбце данные одного вида

И вы знаете в какой таблице какой формат используется ?

Да, знаю!
Всем спасибо!
SET DATEFORMAT помог.
25 июн 09, 14:07    [7342999]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а третий параметр команды connvert - не, не для нас? :)
25 июн 09, 14:42    [7343273]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Crimean
а третий параметр команды connvert - не, не для нас? :)

Ну из фразы в BOL:
автор
Is the style of date format used to convert datetime or smalldatetime data to character data
я понял, что третий параметр только в сторону строки когда используется, но не обратно.
25 июн 09, 14:44    [7343292]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Crimean
а третий параметр команды connvert - не, не для нас? :)

нет, не для нас
ибо в таком случае при запросе вида
SELECT CONVERT(datetime, StringTime, ххх) AS StringTime
  FROM [PAS].[dbo].[temp]
имеем
Msg 241, Level 16, State 1, Line 1
Syntax error converting datetime from character string.
а при запросе
SELECT CONVERT(datetime, StringTime) AS StringTime
  FROM [PAS].[dbo].[temp]
все ОК

т.к.
В следующей таблице два столбца слева представляют значения аргумента style для преобразования datetime или smalldatetime в символьные данные. Добавьте 100 к значению аргумента style, чтобы получить четырехзначное значение года, включающее в себя век (гггг). 
взято с http://msdn.microsoft.com/ru-ru/library/ms187928(SQL.90).aspx

гуру, поправьте меня если я не прав.
25 июн 09, 14:53    [7343374]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
А что интересно вы вместо ххх подставляли ?
25 июн 09, 14:55    [7343391]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> я понял, что третий параметр только в сторону строки когда используется,
> но не обратно.

обратно тоже. в BOL2005 эта фраза продолжена:

or to convert character data of known date or time formats to datetime or smalldatetime data;

Posted via ActualForum NNTP Server 1.4

25 июн 09, 14:57    [7343429]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Crimean
Member

Откуда:
Сообщений: 13148
можно case написать и подставлять тип форматирования на основании форматируемых данных :)
25 июн 09, 15:08    [7343517]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Glory
А что интересно вы вместо ххх подставляли ?

проверил только что все возможные варианты от 100 до 131
результат один, описан выше.
25 июн 09, 15:11    [7343541]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Crimean
можно case написать и подставлять тип форматирования на основании форматируемых данных :)

в моем случае нет необходимости.
25 июн 09, 15:14    [7343567]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
avorsa
Glory
А что интересно вы вместо ххх подставляли ?

проверил только что все возможные варианты от 100 до 131
результат один, описан выше.

Прелестно, все варианты
Вообще то ваши варианты это 1 и 3
25 июн 09, 15:21    [7343604]     Ответить | Цитировать Сообщить модератору
 Re: Convert nvarchar'а в datetime. Есть проблемы.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Glory
avorsa
Glory
А что интересно вы вместо ххх подставляли ?

проверил только что все возможные варианты от 100 до 131
результат один, описан выше.

Прелестно, все варианты
Вообще то ваши варианты это 1 и 3


хм.
3 мой вариант )
спасибо за еще одно решение.
25 июн 09, 15:35    [7343673]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить