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

Откуда:
Сообщений: 1497
Получаю отчет от НБКИ в xml формате
В нем есть такой тег с датой
<issueDate>2002-09-18+03:00</issueDate>

При переводе содержимого тега в sql переменную с типом datetime получаю 17.09.2002

DECLARE @x xml ;
SET @x='<IdReq>
        <idNum>34343</idNum>
        <idType>21</idType>
        <idTypeText>Паспорт гражданина РФ</idTypeText>
        <seriesNumber>1402</seriesNumber>
        <issueCountry>Россия</issueCountry>
        <issueDate>2002-09-18+03:00</issueDate>
        <issueAuthority>71 ОТДЕЛОМ МИЛИЦИИ ПЕТРОГРАДСКОГО РАЙОНА ГОРОДА Санкт-Петербурга</issueAuthority>
      </IdReq>';
      
SELECT T.c.value('issueDate[1]', 'datetime') AS result
FROM   @x.nodes('IdReq') T(c);
6 май 15, 18:01    [17609098]     Ответить | Цитировать Сообщить модератору
 Re: При взятии даты из хмл, значение уменьшается на 1 день :(  [new]
Диам
Member

Откуда:
Сообщений: 1497
Почему? И как победить?
6 май 15, 18:02    [17609106]     Ответить | Цитировать Сообщить модератору
 Re: При взятии даты из хмл, значение уменьшается на 1 день :(  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
SELECT cast(T.c.value('issueDate[1]', 'datetimeoffset') as datetime) AS result
FROM   @x.nodes('IdReq') T(c);
6 май 15, 18:28    [17609231]     Ответить | Цитировать Сообщить модератору
 Re: При взятии даты из хмл, значение уменьшается на 1 день :(  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Диам
Почему?



Потому что выставлена Time Zone.


Диам
И как победить?


Вот так

DECLARE @x xml ;
SET @x='<IdReq>
        <idNum>34343</idNum>
        <idType>21</idType>
        <idTypeText>Паспорт гражданина РФ</idTypeText>
        <seriesNumber>1402</seriesNumber>
        <issueCountry>Россия</issueCountry>
        <issueDate>2002-09-18+03:00</issueDate>
        <issueAuthority>71 ОТДЕЛОМ МИЛИЦИИ ПЕТРОГРАДСКОГО РАЙОНА ГОРОДА Санкт-Петербурга</issueAuthority>
      </IdReq>';
      
SELECT RIGHT(T.c.value('issueDate[1]', 'varchar(100)'), 6), switchoffset (T.c.value('issueDate[1]', 'datetime2'), RIGHT(T.c.value('issueDate[1]', 'varchar(100)'), 6)) AS result
FROM   @x.nodes('IdReq') T(c);
6 май 15, 18:31    [17609246]     Ответить | Цитировать Сообщить модератору
 Re: При взятии даты из хмл, значение уменьшается на 1 день :(  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
invm
SELECT cast(T.c.value('issueDate[1]', 'datetimeoffset') as datetime) AS result
FROM   @x.nodes('IdReq') T(c);


так проще
6 май 15, 18:32    [17609254]     Ответить | Цитировать Сообщить модератору
 Re: При взятии даты из хмл, значение уменьшается на 1 день :(  [new]
Диам
Member

Откуда:
Сообщений: 1497
Спасибо. Работает :)
7 май 15, 05:41    [17610471]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить