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

Откуда: Львов
Сообщений: 11
Требуется добыть все значения CreditStartDate, ContractEndDate с xml поля. Бьюсь второй день, удалось только склепать вот такой скрипт, но он выбирает все возможные комбинации значений (типа cross join в sql). Читать форумы не помогло, хотя вопрос довольно часто поднимается на англ форумах. Так понимаю, скрипт зависит от структуры конкретного xml поля. Первый раз взялся за добычу инфу из xml. Прошу помощи у сообщества.



DECLARE @xmltest XML

SELECT @xmltest = '
<Result>
<Report>

<Contracts>
<Contract>

<CreditStartDate>2013-04-17T00:00:00</CreditStartDate>
<ContractEndDate>2016-04-17T00:00:00</ContractEndDate>

</Contract>
<Contract>

<CreditStartDate>2010-12-23T00:00:00</CreditStartDate>
<ContractEndDate>2013-12-23T00:00:00</ContractEndDate>

</Contract>
<Contract>

<CreditStartDate>2013-02-21T00:00:00</CreditStartDate>
<ContractEndDate>2015-08-21T00:00:00</ContractEndDate>

</Contract>
</Contracts>

</Report>
</Result>'

SELECT y.N.value('(text())[1]', 'datetime') AS x
,
m.k.value('(text())[1]', 'datetime') AS y
FROM
@xmltest.nodes('(//Contracts)') AS T ( N )
outer apply t.n.nodes('(//Contract/CreditStartDate)') AS y ( N )
outer apply t.n.nodes('(//Contract/ContractEndDate)') AS m ( k )
29 ноя 13, 18:59    [15214911]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все значения узлов XQuery  [new]
qwerty112
Guest
westsiderlviv
Требуется добыть все значения CreditStartDate, ContractEndDate с xml поля. Бьюсь второй день, удалось только склепать вот такой скрипт, но он выбирает все возможные комбинации значений (типа cross join в sql). Читать форумы не помогло, хотя вопрос довольно часто поднимается на англ форумах. Так понимаю, скрипт зависит от структуры конкретного xml поля. Первый раз взялся за добычу инфу из xml. Прошу помощи у сообщества.

+
DECLARE @xmltest XML

SELECT  @xmltest = '
<Result>
  <Report>
    
    <Contracts>
      <Contract>
        
        <CreditStartDate>2013-04-17T00:00:00</CreditStartDate>
        <ContractEndDate>2016-04-17T00:00:00</ContractEndDate>
        
      </Contract>
      <Contract>
        
        <CreditStartDate>2010-12-23T00:00:00</CreditStartDate>
        <ContractEndDate>2013-12-23T00:00:00</ContractEndDate>
       
      </Contract>
      <Contract>
        
        <CreditStartDate>2013-02-21T00:00:00</CreditStartDate>
        <ContractEndDate>2015-08-21T00:00:00</ContractEndDate>
        
      </Contract>
    </Contracts>
    
  </Report>
</Result>'

SELECT  y.N.value('(text())[1]', 'datetime') AS x 
,
        m.k.value('(text())[1]', 'datetime') AS y
FROM    
@xmltest.nodes('(//Contracts)') AS T ( N )
outer apply t.n.nodes('(//Contract/CreditStartDate)') AS y ( N )
outer apply t.n.nodes('(//Contract/ContractEndDate)') AS m ( k )


так ?
SELECT  T.N.value('CreditStartDate[1]/text()[1]', 'datetime') AS x 
,
        T.N.value('ContractEndDate[1]/text()[1]', 'datetime') AS y
FROM    
@xmltest.nodes('(//Contracts/Contract)') AS T ( N )
--outer apply t.n.nodes('(//Contract/CreditStartDate)') AS y ( N )
--outer apply t.n.nodes('(//Contract/ContractEndDate)') AS m ( k )

x                       y
----------------------- -----------------------
2013-04-17 00:00:00.000 2016-04-17 00:00:00.000
2010-12-23 00:00:00.000 2013-12-23 00:00:00.000
2013-02-21 00:00:00.000 2015-08-21 00:00:00.000


зы
код в теги оформления кода "ложи" !!
29 ноя 13, 19:07    [15214941]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все значения узлов XQuery  [new]
westsiderlviv
Member

Откуда: Львов
Сообщений: 11
То, что надо. Спасибо!
29 ноя 13, 21:01    [15215314]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить