gpt4 book ai didi

sql-server - Xml.modify 'replace value of' 中的 SQL REPLACE 函数

转载 作者:行者123 更新时间:2023-12-03 16:14:51 25 4
gpt4 key购买 nike

我正在尝试更新 SQL Server 中的一些 XML 数据。 XML 包含如下所示的数据:

<root>
<id>1</id>
<timestamp>16-10-2017 19:24:55</timestamp>
</root>

假设此 XML 存在于名为 TestTable 的表中名为 Data 的列中。我希望能够将时间戳中的连字符更改为正斜杠。

我希望我可以做类似的事情:

update TestTable
set Data.modify('replace value of
(/root/timestamp/text())[1] with REPLACE((/root/timestamp/text())[1], "-", "/")')

我收到以下错误:

XQuery [TestTable]: There is no function '{http://www.w3.org/2004/07/xpath-functions}:REPLACE()'

当我想到它时,这是有道理的。但我想知道,有没有办法在一个更新语句中做到这一点?或者我是否需要先查询时间戳值并将其保存为变量,然后使用该变量更新 XML?

最佳答案

您还可以通过连接到内联 View 并使用 SQL REPLACE 函数来执行此操作:

   CREATE TABLE TestTable
(
Id INT IDENTITY(1,1) NOT NULL,
Data XML NOT NULL
)

INSERT TestTable (Data) VALUES ('<root>
<id>1</id>
<timestamp>16-10-2017 19:24:55</timestamp>
</root>')

UPDATE TestTable
SET Data.modify('replace value of
(/root/timestamp/text())[1] with sql:column("T2.NewData")')
FROM TestTable T1
INNER JOIN (
SELECT Id
, REPLACE( Data.value('(/root/timestamp/text())[1]', 'nvarchar(max)'), '-', '/') AS NewData
FROM TestTable
) T2
ON T1.Id = T2.Id

SELECT * FROM TestTable

关于sql-server - Xml.modify 'replace value of' 中的 SQL REPLACE 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47048658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com