在SQL中读取Xml日期值

时间:2014-04-03 17:37:20

标签: sql sql-server xml date

我试图从SQL表的XML列中提取DATE值。下面是我在xml列中的示例数据。我试图使用XQuery Value函数读取DATE。

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。

1 个答案:

答案 0 :(得分: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

如果您想按field属性过滤name个元素,请使用:

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