我想有条件地删除 SQL Server 2005 上 XML 字段中的元素。例如,我有以下数据:
<stats>
<stat date="2011-09-25 00:00:00" val="1"/>
<stat date="2011-09-26 00:00:00" val="5"/>
<stat date="2011-09-27 00:00:00" val="3"/>
</stats>
如何使用 T-SQL 删除日期值早于一天的统计元素?
理论上,我想理想的解决方案可以表示为:
UPDATE XML_TEST
SET XML_DATA_FIELD.modify('delete (/stats/stat)')
WHERE XML_DATA_FIELD.nodes('/stats/stat').value('@date',
'datetime') < DATEADD(day, -1, GETDATE())
这当然行不通。
最佳答案
这应该可以达到您的要求:
declare @testXml xml = '<stats>
<stat date="2011-09-25 00:00:00" val="1"/>
<stat date="2011-09-26 00:00:00" val="5"/>
<stat date="2011-09-27 00:00:00" val="3"/>
</stats>'
,@yesterday varchar(20) = convert(varchar, dateadd(day, -1, getdate()), 120)
set @testXml.modify('delete //stat[@date < sql:variable("@yesterday")]')
呃,字符串比较...
关于sql-server - 使用 T-SQL 有条件地删除 SQL Server 中 XML 字段中的 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573160/