Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 xml satetime 0001-01-01T00:00:00  [new]
MaratSH
Member

Откуда: Moscow
Сообщений: 179
Как обойти проблему со значением 0001-01-01T00:00:00 типа datetime в xml ?

Вот пример запроса из xml в котором поле даты имеет такое значение. Ошибка выполнения:

Сообщение 242, уровень 16, состояние 3, строка 6
Преобразование типа данных datetimeoffset в тип данных datetime привело к выходу значения за пределы диапазона.


Если в запросе заменить дату на значение, начиная с 1753-01-01T00:00:00+00:00 то запрос выполняется без ошибок.

declare @xml xml
set @xml = '<Root xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.myserver.ru/abc/def">
  <DateField>0001-01-01T00:00:00</DateField>
</Root>'

;with xmlnamespaces(default 'http://www.myserver.ru/abc/def', 'http://www.w3.org/2001/XMLSchema-instance' as i)
select
  a.b.value('DateField[1]', 'datetime') as DateField
from @xml.nodes('/Root') as a(b)
1 апр 16, 20:18    [19006868]     Ответить | Цитировать Сообщить модератору
 Re: xml satetime 0001-01-01T00:00:00  [new]
iljy
Member

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

преобразуйте сначала в строку, проверяйте и конвертируйте
1 апр 16, 20:20    [19006873]     Ответить | Цитировать Сообщить модератору
 Re: xml satetime 0001-01-01T00:00:00  [new]
LoopN
Guest
datetime c 1753 начинается. Поменять на datetime2?
1 апр 16, 20:22    [19006876]     Ответить | Цитировать Сообщить модератору
 Re: xml satetime 0001-01-01T00:00:00  [new]
LoopN
Guest
select TRY_CAST(a.b.value('DateField[1]', 'varchar(100)') AS DATETIME) as DateField
1 апр 16, 20:25    [19006888]     Ответить | Цитировать Сообщить модератору
 Re: xml satetime 0001-01-01T00:00:00  [new]
vba-dev
Member

Откуда:
Сообщений: 36
LoopN, скажите, а есть аналог этой функции для SQL 2008R2 ?
2 апр 16, 03:27    [19007967]     Ответить | Цитировать Сообщить модератору
 Re: xml satetime 0001-01-01T00:00:00  [new]
iljy
Member

Откуда:
Сообщений: 8711
vba-dev,

нет. Либо анализируйте строку, либо используйте ISDATE и преобразование в DATE для проверки диапазона.
2 апр 16, 03:47    [19007973]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить