2015-11-11 4 views
1

Я просмотрел stackoverflow для извлечения XML, но ни один из них не помогает в этом XML-формате. Я пробовал использовать много разных, но ни один из них не возвращает то, что мне нужно. Проблема, я думаю, в том, что она не в узлах, но XML-файл представляет собой целую строку значений NOTE. Я смущен :(SQL - вернуть определенную часть из XML-типа

У меня есть таблица с именем XMLTable с 2 колонками

- ID (int) 
- Annotations (xml) 

Я внутреннее присоединение к XMLTable с другой таблицей на основе ID и мне нужно выбрать также часть даты из XML поле ('Метка Date')

SELECT s.*, x.Date 
FROM Statement s 
INNER JOIN XMLTable x 
ON s.ID = x.ID 

Не могли бы вы помочь мне выбрать даты только из XML-таблицы? (Использование SQL 2012)

XML формат:

<ANNOTATIONS> 
    <NOTE Label="Date">2015-01-13T09:24:58.903</NOTE> 
    <NOTE Label="Type">ABC</NOTE> 
    <NOTE Label="Status">Done</NOTE> 
    <NOTE Label="Unit">KG</NOTE> 
    <NOTE Label="GUI">aa11123-zxc6-1111xxxxx</NOTE> 
    <NOTE Label="GUIID">10</NOTE> 
</ANNOTATIONS> 

Благодарим вас за консультацию!

+0

Привет, я рад, что читать, что мы могли бы помочь вам решить вашу проблему. Было бы очень мило, чтобы вы приняли один из ответов (чек ниже счетчика голосов). Это показывает другим, что этот вопрос решен, и это означает точки репутации для того, который вы выбрали. Спасибо! – Shnugo

+0

Привет, пожалуйста, не забудьте проверить один из ответов, как принято, thx! – Shnugo

ответ

2

Это должно помочь вам:

SELECT s.*, x.Annotations.value('(/ANNOTATIONS/NOTE[@Label="Date"])[1]','datetime') AS AnnotationDate 
FROM Statement s 
INNER JOIN XMLTable x 
ON s.ID = x.ID 
+0

Возможно, это была опечатка, значение должно быть привязано к столбцу, а не к имени таблицы. –

+0

@CetinBasoz, Да, конечно! Thx для улова! Я проголосую за вас, даже если он сейчас совпадает с моим (ОК, за исключением имени столбца :-)) – Shnugo

+0

:) Спасибо. Я мог бы сделать это по-другому, но тогда было бы слишком долго. т.е.: WITH xmlData (id, label, value) AS ( SELECT id, t2.MyNotes.value ('@ Label', 'varchar (50)'), t2.MyNotes.value ('.', 'varchar (50) ') ОТ [xmlTest] AS [х] CROSS APPLY [данных] .nodes ('/ПОЯСНЕНИЯ/Примечание ') как t2 (MyNotes) ), разобраны AS ( SELECT, идентификатор, CAST (значение AS DATETIME) AS MyDate FROM [XMLDATA] WHERE метка = 'Дата' ), .. –

2
SELECT s.*, 
     x.Annotations.value('(/ANNOTATIONS/NOTE[@Label="Date"])[1]', 
          'datetime') AS MyDate 
FROM [Statement] s 
INNER JOIN XMLTable x ON s.ID = x.ID; 
+0

Shnugo/Четин Basoz, спасибо большое !!!!! Действительно полезно! :) – user2216540

Смежные вопросы