sql-server - 使用 T-SQL 有条件地删除 SQL Server 中 XML 字段中的 XML 元素

标签 sql-server xml tsql

我想有条件地删除 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/

相关文章:

c# - 如何下载存储在sql server中的图像

sql-server - SSIS发送邮件文件附件失败

android - 使用 XML 在 Android 中创建 3D 翻转动画

php - 带有重音符号的 XML 字符编码问题

sql - 如何在 T-SQL 中优化多表排序的联接?

sql - 直接从另一个数据库还原 SQL Server 数据库

sql-server - SQL Server 中标量、表值和聚合函数之间的区别?

sql - 在 Windows Server 2003 企业版上并排安装 SQL Server 2008 R2 和 MySQL 是否安全?

xml - 在不排序的情况下从和xml中选择最低值

sql - 将存储过程执行到动态临时表中