2014-04-03 46 views
0

我正在尝试从SQL表的XML列中提取DATE值。以下是我在xml列中的示例数据。我正在尝试使用XQuery Value函数读取DATE。在SQL中读取Xml日期值

DECLARE @XML XML = '<form><field name="BAR_DateTo" type="Date"> 
         <date format="yyyy-MM-dd HH:mm:ss"> 
          <value>2011-07-04 00:00:00</value> 
         </date> 
        </field></form>' 

SELECT 
    @XML.value('(/form/field[@name="BAR_DateTo"]/value)[1]', 'date') AS BARDATE 

我得到NULL值作为输出。我期待看到2011-07-04 00:00:00或2011-07-04。

+0

不应该是'/ form/field [@ name =“BAR_DateTo”]/date/value'? – user2989408

回答

0

您xpath不正确。试试这个:

DECLARE @XML XML = '<field name="BAR_DateTo" type="Date"> 
         <date format="yyyy-MM-dd HH:mm:ss"> 
          <value>2011-07-04 00:00:00</value> 
         </date> 
        </field>' 
SELECT 
    @XML.value('(//value)[1]', 'date') AS BARDATE 

,或者如果需要的话可以使用使用完整的XPath:

SELECT 
    @XML.value('(/field/date/value)[1]', 'date') AS BARDATE 

如果你想通过name属性筛选field元素,使用:

SELECT 
    @XML.value('(/field[@name=''BAR_DateTo'']/date/value)[1]', 'date') AS BARDATE 

这是取决于如何在XML中表示的布尔值。在你的情况下,你可以尝试:

DECLARE @XML XML = 
'<field name="BAR_corrects_prior_report" type="Boolean"> 
    <value>false</value> 
</field>' 

SELECT CASE @XML.value('(/field[@name=''BAR_corrects_prior_report'' and @type=''Boolean'']/value)[1]', 'varchar(10)') 
     WHEN 'true' THEN 1 
     ELSE 0 END AS BARDATE 
+0

Thnaks Hamlet.I已经更新了下面一个代码为我工作 选择 @ XML.value( '(//值)[1]', '日')AS BARDATE 我已经错过了双反斜线 谢谢 – user3437858

+0

哈姆雷特, 你能提供关于如何读取XML中布尔值的示例吗? false user3437858

+0

@ user3437858,我已经更新了答案。 –