sql-server - 修改存储在 SQL Server 表中的 XML 文档中的日期字段

标签 sql-server xml xml-dml

我有一个存储在 SQL Server 表 xml 列中的 xml 文档,该文档的日期字段中的时间不准确

我想将文档中的所有日期和时间(SaleDateTime、LineStartTime、LineEndTime)值更新 15 秒,例如,2012-02-01T00:07:50 变为 2012-02-01T00:08 :05(说来话长,为什么要这样;这不由我掌控)。可以有 1 到多笔交易,每笔交易可以有 1 个或多个行条目。

我已经尝试使用 DATEADD 进行 OPENXML、修改方法等,但无法得到正确的结果。我不知道该怎么做。任何帮助表示赞赏。提前致谢!!

示例如下

CREATE TABLE XMLTable (doc xml);

INSERT INTO XMLTable (doc)
VALUES
(
'<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Transaction>
  <SaleID>1</SaleID>
  <Sale>
    <SaleDateTime>2012-02-01T00:07:00</SaleDateTime>
    <LineItem>
      <Line>1</Line>
      <LineStartTime>2012-02-01T00:07:00</LineStartTime>
      <LineEndTime>2012-02-01T00:07:00</LineEndTime>
          <Amount>13.50</Amount>
    </LineItem>
  </Sale>
</Transaction>
<Transaction>
  <SaleID>2</SaleID>
  <Sale>
    <SaleDateTime>2012-02-01T00:11:00</SaleDateTime>
    <LineItem>
      <Line>1</Line>
      <LineStartTime>2012-02-01T00:11:00</LineStartTime>
      <LineEndTime>2012-02-01T00:11:00</LineEndTime>
          <Amount>13.50</Amount>
    </LineItem>
    <LineItem>
      <Line>2</Line>
      <LineStartTime>2012-02-01T00:11:00</LineStartTime>
      <LineEndTime>2012-02-01T00:11:00</LineEndTime>
          <Amount>5.22</Amount>
    </LineItem>
  </Sale>
</Transaction>
</Root>')

SELECT * FROM XMLTable 

最佳答案

您可以使用修改方法。例如,替换第一次出现的 SaleDateTime:

declare @now datetime = getdate()

update  XMLTable
set     doc.modify('replace value of (/Root/Transaction/Sale/SaleDateTime/text())[1] 
                    with sql:variable("@now")') 

关于sql-server - 修改存储在 SQL Server 表中的 XML 文档中的日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375379/

相关文章:

asp.net - 为什么我要为 MS SQL 数据库而不是 MySQL 数据库支付虚拟主机费用?

sql - 将 postgres 交叉表查询转换为 SQL

sql - 读取表中的 XML

c++ - 使用 Libxml2 的 C++ 程序中的错误

sql - SQL Server 存储过程中的自定义标识符生成

php - 将四张表合并为一张新表

java - Android USB 设备过滤器

sql-server - 使用 XML-DML 在现有实例中动态插入 XML 节点的位置

xml - TSQL XML 将节点值转换为 int