2013-09-09 7 views
2

У меня есть XML, хранящийся в моей таблице. В этой таблице указаны типы идентификаторов столбцов int и тип XML. Я использую SQL Server 2012.SELECT XML FROM TABLE В SQL SERVER

XML выглядит следующим образом:

<?xml version="1.0" encoding="utf-16"?> 
<Weather> 
<Forecast> 
<Description>sky is clear</Description> 
<Date>6.9.2013 23:50:36</Date> 
<MinTemp>13</MinTemp> 
<MaxTemp>13</MaxTemp> 
<Pressure>995</Pressure> 
<Humidity>68</Humidity> 
</Forecast> 
</Weather> 

Этот XML может иметь до этого Прогноз частей. Как я могу с простым выражением SELECT получить, например, значение влажности?

Я пробовал несколько thins, которые я нашел здесь, но я продолжаю получать NULL, поэтому я задаю этот вопрос. Пожалуйста, помогите ...

+0

Проверить этот подобный вопрос [Выберите значения из поля XML в SQL Server 2008] (http://stackoverflow.com/questions/899313/select-values-from-xml-field-in-sql-server -2008). Это может быть полезно. –

+0

Если вы делитесь некоторыми запрошенными запросами, кто-то может определить ошибку и т. Д., Что вызывает вашу проблему. –

ответ

1

Попробуйте так: -

select 
    columnname 
from 
    MyTable 
where 
    columnname.value('(/Weather/Forecast)[1]', 'varchar(max)') like 'StringToSearchFor' 

или, как предложено в этом link как это: -

SELECT 
[xmlField].value('(/Weather//Forecast/Description/node())[1]', 'nvarchar(max)') as columname 
FROM [myTable] 
+1

Спасибо, очень помогли! Я был так близко, но не мог найти ошибку. БЛАГОДАРЯ! – Edna

+0

Можете ли вы рассказать мне, что делать, если у меня есть XML, который содержит 10 частей для прогноза? Я начал использовать SQL несколько дней назад, так что все новое для меня ... – Edna

+0

Вы должны указать узлы для всех 10 частей прогноза !! –

2

Если у вас есть более чем один прогноз в вашем XML, используйте nodes функция:

select 
    id, d.c.value('Humidity[1]', 'bigint') as Humidity 
from test as t 
    outer apply t.Data.nodes('Weather/Forecast') as d(c) 

sql fiddle demo

+1

Спасибо большое! Хотел бы я принять два ответа, но не могу. Так что проголосуйте! – Edna

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