SQL Server 2012 - 如何从XML字符串中提取值?

时间:2015-06-04 13:50:03

标签: sql-server xml

这看起来很基本,但我找不到适合我的例子,所以我很感激任何建议。

我有一个SQL Server函数,它根据我们的会计年度和今天的日期确定各种日期,并返回一行看起来像...... <row LastDayPrevMonth="2015-04-30T00:00:00" LastDayPrevMonthLY="2014-04-30T00:00:00" ... />

在调用该函数的存储过程中,我已经完成了......

DECLARE @X XML
SET @X = dbo.GetFiscalYearDates()

...但是我似乎无法提取LastDayPrevMonth的值。

我尝试过几十种变体: SELECT ROW.ITEM.VALUE('LastDayPrevMonth', 'VARCHAR(30)')[1] AS Foo FROM @x.nodes('row/item') ...有时在最后有一个“AS Bar”......

该特定语法将错误“错误的语法附近的语法'作为'”,但任何调整我都没有帮助。

感谢您的帮助,伙计!

1 个答案:

答案 0 :(得分:2)

declare @doc xml

select @doc= '
<root>
<row LastDayPrevMonth="2015-04-30T00:00:00" LastDayPrevMonthLY="2014-04-30T00:00:00" />
</root>
'

SELECT 
      LastDayPrevMonth = Y.i.value('(@LastDayPrevMonth)[1]', 'datetime')
    , LastDayPrevMonthLY = Y.i.value('@LastDayPrevMonthLY[1]', 'datetime') 

FROM 
    @doc.nodes('root/row') AS Y(i)