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

Откуда:
Сообщений: 169
Люди, помогите пожалуйста решить делему.

Нужно преобразовать строковую дату формата 01.01.2012 в формат datetime
И ещё добавить замену replace.
В date преобразует без проблем, пример ниже, в datetime не хочет выдает ошибку: "Преобразование типа данных nvarchar в тип данных datetime привело к выходу значения за пределы диапазона."

convert(date, left(replace(v.Data_registratsii_dogovora,'01.01.0001','01.01.2000'), 10), 104) CONTRACT_DATE
22 фев 13, 09:49    [13965008]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
v.Data_registratsii_dogovora = 01.01.2012
22 фев 13, 09:49    [13965013]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Как преобразовать эту строку left(replace(v.Data_registratsii_dogovora,'01.01.0001','01.01.2000'), 10)
в datetime?
22 фев 13, 09:50    [13965017]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Указанная вами дата конвертится без проблем. Видимо, у вас в столбце где-то есть значения даты в другом формате, ну или вообще не дата. На них сиквел и ругается.

Смотрите в сторону функции ISDATE(), что ли.
22 фев 13, 09:58    [13965065]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Напишите пожалуйста как вы делали? Хотите сказать эта строка: left(replace(v.Data_registratsii_dogovora,'01.01.0001','01.01.2000'), 10) конвертится в datetime ? Я пробовал так: CONVERT (datetime, left(replace(v.Data_registratsii_dogovora,'01.01.0001','01.01.2000'), 10), 120)
22 фев 13, 10:02    [13965085]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Насчет не даты в столбце догадывался, но там слишком много строк, чтобы это проверить.
22 фев 13, 10:03    [13965095]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Проверю сейчас через ISDATE()
22 фев 13, 10:04    [13965107]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
ISDATE() вернул везде 1
22 фев 13, 10:13    [13965152]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Напишите пожалуйста как вы делали? Хотите сказать эта строка: left(replace(v.Data_registratsii_dogovora,'01.01.0001','01.01.2000'), 10) конвертится в datetime ? Я пробовал так: CONVERT (datetime, left(replace(v.Data_registratsii_dogovora,'01.01.0001','01.01.2000'), 10), 120)
22 фев 13, 10:13    [13965154]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
Glory
Member

Откуда:
Сообщений: 104751
r18romik
'01.01.0001'

BOL - datetime Description
Date range - January 1, 1753, through December 31, 9999

BOL - date Description
Range 0001-01-01 through 9999-12-31 January 1, 1 A.D. through December 31, 9999 A.D.
22 фев 13, 10:14    [13965161]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Даже если убрать replace и оставить так: CONVERT (datetime, v.Data_registratsii_dogovora, 120) CONTRACT_DATE2 выдает тоже самое.
Видать формат даты менять нужно.
22 фев 13, 10:24    [13965242]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
Glory
Member

Откуда:
Сообщений: 104751
r18romik
CONVERT (datetime, v.Data_registratsii_dogovora, 120) C

А вы открывали хелп для выбора формата ?
120 это вообще то формат yyyy-mm-dd hh:mi:ss. А не dd.mm.yyyy
22 фев 13, 10:27    [13965268]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Да конечно. Знаю что
то 104 формат
Последний вариант просто скопировался сюда, пробовал по разному, ни как не робит.
22 фев 13, 10:36    [13965309]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
Glory
Member

Откуда:
Сообщений: 104751
r18romik
пробовал по разному, ни как не робит.

Это значит, что ваше символьное поле содержит невалидные данные.
22 фев 13, 10:38    [13965314]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
Гость333
Member

Откуда:
Сообщений: 3683
r18romik,

Такой запрос что-нибудь возвращает?
select *
from [Таблица]
where Data_registratsii_dogovora not like '01.01.0001%'
      and cast(substring(Data_registratsii_dogovora, 7, 4) as int) < 1753

И... для чего нужно хранить дату в текстовом поле?!
22 фев 13, 11:36    [13965712]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Да, запрос возвращает практически все значение. Есть записи NULL но я их уже убрал.
В тексте хранится потому, что в таблицу загружается из XML файла.
Дальше данные сравниваются с текущими записями и перекидываются в другую таблицу. Как раз в этот момент и нужна преобразовать в datetime
22 фев 13, 12:27    [13966109]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
Гость333
Member

Откуда:
Сообщений: 3683
r18romik
Да, запрос возвращает практически все значение.

Хм. Можете привести примеры возвращаемых значений?
22 фев 13, 12:31    [13966136]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169


К сообщению приложен файл. Размер - 78Kb
22 фев 13, 12:37    [13966177]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Дату я могу выгрузить в любом формате, лишь бы она нормально конвертнулась.
22 фев 13, 13:17    [13966530]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
r18romik
Дату я могу выгрузить в любом формате, лишь бы она нормально конвертнулась.
Так выгружайте в виде 'YYYYMMDD HH:MM:SS' или 'YYYY-MM-DDTHH:MM:SS'
Только, конечно, если меньше '17530101', то в DATETIME такое не сконвертировать.
22 фев 13, 13:36    [13966680]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
r18romik
Member

Откуда:
Сообщений: 169
Всем спасибо. Сделал.
Выгрузил в формате 'YYYYMMDD HH:MM:SS' и прописал convert(datetime, v.Data_registratsii_dogovora)
Единственное ещё пришлось вывести ГОД и поставить по нему условие, так как у кого-то руки кривые и в договоре завели дату с годом 0112 и она конечно же не конвертится.
22 фев 13, 15:28    [13967565]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование из nvarchar в datetime  [new]
iap
Member

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

для этого формата явная конвертация совсем не обязательна (это я про CONVERT() и CAST())
22 фев 13, 19:47    [13968894]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить