我试图从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。
答案 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