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

Откуда:
Сообщений: 61
DECLARE @idoc int
DECLARE @doc xml 
SET @doc = N'
<?xml version="1.0" encoding="Windows-1251" ?>
<?xml-stylesheet type="text/xsl" href="pbr2.xsl"?>
<PBR name="fgjjddjdh" system="05.07.2009 00:29:51 hgdfgkjdf">
<GOU id="gou001B339130001089">
	<Name>gjhfj</Name><List number="05-07-2009">
	<Time time="2009-07-05T03:00+06">
		<Power><Nagr repeating=" 0">6</Nagr><Max repeating=" 0">6</Max></Power>
	</Time>
	<Time time="2009-07-05T03:30+06">
		<Power><Nagr repeating=" 1">6</Nagr><Max repeating=" 1">6</Max></Power>
	</Time>
	<Time time="2009-07-05T04:00+06">
		<Power><Nagr repeating=" 1">6</Nagr><Max repeating=" 1">6</Max></Power>
	</Time>
</List>
</GOU>
</PBR>'

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT *
	FROM OPENXML (@idoc, N'/PBR/GOU/List/Time')
		WITH (dt  datetime '@time')

EXEC sp_xml_removedocument @idoc
выдаёт ошибку:
--Conversion failed when converting datetime from character string.
Почему не происходит приобразование стандартной XML-даты в SQL datetime?
Куда копать? Что не так?

P.S.
SELECT @@Version
--8.00.760
[/quot]
2 сен 09, 20:35    [7610474]     Ответить | Цитировать Сообщить модератору
 Re: Дату из XML в MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Albert71
Куда копать? Что не так?

P.S.
SELECT @@Version
--8.00.760

Такого текстового представления даты - 2009-07-05T03:30+06 -в SQL2000 нет
Придется самому вычислять дату

Сообщение было отредактировано: 2 сен 09, 21:09
2 сен 09, 20:50    [7610502]     Ответить | Цитировать Сообщить модератору
 Re: Дату из XML в MS SQL  [new]
Albert71
Member

Откуда:
Сообщений: 61
Glory
Albert71
Куда копать? Что не так?

P.S.
SELECT @@Version
--8.00.760

Такого текстового представления даты - 2009-07-05T03:30+06 -в SQL2000 нет
Придется самому вычислять дату

Как нету?
А это?
DECLARE @dt
SET @dt = '20090902'
SELECT CONVERT(nvarchar(max), @dt, 127)
2 сен 09, 20:58    [7610520]     Ответить | Цитировать Сообщить модератору
 Re: Дату из XML в MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Albert71
Как нету?
А это?
DECLARE @dt
SET @dt = '20090902'
SELECT CONVERT(nvarchar(max), @dt, 127)
А откуда в 8.00.760 вдруг взялись nvarchar(max) и стиль 127 ?
2 сен 09, 21:02    [7610530]     Ответить | Цитировать Сообщить модератору
 Re: Дату из XML в MS SQL  [new]
Albert71
Member

Откуда:
Сообщений: 61
Glory
Albert71
Как нету?
А это?
DECLARE @dt datetime
SET @dt = '20090902'
SELECT CONVERT(nvarchar(max), @dt, 127)
А откуда в 8.00.760 вдруг взялись nvarchar(max) и стиль 127 ?
Виноват. Не ту версию написал. Мне для 2005 MS SQL надо.
2 сен 09, 21:07    [7610554]     Ответить | Цитировать Сообщить модератору
 Re: Дату из XML в MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Хелп нужно читать внимательно

7The optional time zone indicator, Z, is used to make it easier to map XML datetime values that have time zone information to SQL Server datetime values that have no time zone. Z is the indicator for time zone UTC-0. Other time zones are indicated with HH:MM offset in the + or - direction. For example: 2006-12-12T23:45:12-08:00.
2 сен 09, 21:15    [7610593]     Ответить | Цитировать Сообщить модератору
 Re: Дату из XML в MS SQL  [new]
Albert71
Member

Откуда:
Сообщений: 61
Glory
Хелп нужно читать внимательно

7The optional time zone indicator, Z, is used to make it easier to map XML datetime values that have time zone information to SQL Server datetime values that have no time zone. Z is the indicator for time zone UTC-0. Other time zones are indicated with HH:MM offset in the + or - direction. For example: 2006-12-12T23:45:12-08:00.

Хотите скать что не хватает ":00" в конце?
Ну так всё равно не хочет:
DECLARE @idoc int
DECLARE @doc xml 
SET @doc = '
<PBR name="fgjjddjdh" system="05.07.2009 00:29:51 hgdfgkjdf">
<GOU id="gou001B339130001089">
	<Name>gjhfj</Name><List number="05-07-2009">
	<Time time="2009-07-05T03:00:00+06:00">
		<Power><Nagr repeating=" 0">6</Nagr><Max repeating=" 0">6</Max></Power>
	</Time>

</List>
</GOU>
</PBR>'

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT *
	FROM OPENXML (@idoc, '/PBR/GOU/List/Time')
		WITH (dt  datetime '@time')

EXEC sp_xml_removedocument @idoc
Conversion failed when converting datetime from character string.
2 сен 09, 21:25    [7610634]     Ответить | Цитировать Сообщить модератору
 Re: Дату из XML в MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Albert71
Glory
Хелп нужно читать внимательно

7The optional time zone indicator, Z, is used to make it easier to map XML datetime values that have time zone information to SQL Server datetime values that have no time zone. Z is the indicator for time zone UTC-0. Other time zones are indicated with HH:MM offset in the + or - direction. For example: 2006-12-12T23:45:12-08:00.

Хотите скать что не хватает ":00" в конце?
Ну так всё равно не хочет:

Разумеется не хочет. Вы же нигде не указали convert с нужным стилем.
2 сен 09, 22:37    [7610811]     Ответить | Цитировать Сообщить модератору
 Re: Дату из XML в MS SQL  [new]
sPaul
Member

Откуда: Moscow
Сообщений: 387
DECLARE @idoc int
DECLARE @doc xml 
SET @doc = '
<PBR name="fgjjddjdh" system="05.07.2009 00:29:51 hgdfgkjdf">
<GOU id="gou001B339130001089">
	<Name>gjhfj</Name><List number="05-07-2009">
	<Time time="2009-07-05T03:00:00+06:00">
		<Power><Nagr repeating=" 0">6</Nagr><Max repeating=" 0">6</Max></Power>
	</Time>

</List>
</GOU>
</PBR>'

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT convert(xml,dt).value('xs:dateTime(.)','datetime')
	FROM OPENXML (@idoc, '/PBR/GOU/List/Time')
		WITH (dt  varchar(444) '@time')

EXEC sp_xml_removedocument @idoc
2 сен 09, 22:37    [7610812]     Ответить | Цитировать Сообщить модератору
 Re: Дату из XML в MS SQL  [new]
Albert71
Member

Откуда:
Сообщений: 61
sPaul
...
Спасибо! Практичесски то что нужно.
А можно эту строчку:
...
value('xs:dateTime(.)','datetime')
...
Как-нибудь в секцию WITH засунуть?


И ещё. Всё же у меня в XML-файле дата вот именно в таком формате - "2009-07-05T03:00+06". Файл создаю не я, но думаю, что он всё же создаётся по каким-то стандарным стандартам. Что это за такой формат даты, и как его автоматом сконвертить в SQL datetime? Дописывать после минут секунды и в секцию TimeZone минуты как-то не очень красиво. Раз как-то этот файл создаётся, должно быть и обратное преобразование.
2 сен 09, 23:03    [7610857]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить