我正在尝试更新其中具有多个名称空间的表中的特定列。我的表结构是:
SELECT client_channel_nameid
, SUM(CASE
WHEN EXTRACT(day FROM order_date) = 21 THEN selling_price
ELSE 0
END) AS "21"
, SUM(CASE
WHEN EXTRACT(day FROM order_date) = 20 THEN selling_price
ELSE 0
END) AS "20"
FROM sale_order so
JOIN sale_order_item soi
ON soi.sale_orderid = so.sale_orderid
GROUP BY so.client_channel_nameid
在此表中,我想更改+------+---------+-----------------------------------------------------------------------+
| cid | cidtype | xml_data |
+------+---------+-----------------------------------------------------------------------+
| 1001 | N | <Main xmlns:json=""http://www.samplenamespace.com/json"" > |
| | | <ID json:ValueType=""Number"">1001</ID> |
| | | <details> |
| | | <name xmlns:json=""http://www.samplenamespace.com/json"">John</name> |
| | | <age xmlns:json=""http://www.samplenamespace.com/json"">12</age> |
| | | </details> |
| | | </Main> |
| 1003 | N | <Main xmlns:json=""http://www.samplenamespace.com/json"" > |
| | | <ID json:ValueType=""Number"">1003</ID> |
| | | <details> |
| | | <name xmlns:json=""http://www.samplenamespace.com/json"">Diane</name> |
| | | <age xmlns:json=""http://www.samplenamespace.com/json"">25</age> |
| | | </details> |
| | | </Main> |
| 1004 | N | <Main xmlns:json=""http://www.samplenamespace.com/json"" > |
| | | <ID json:ValueType=""Number"">1004</ID> |
| | | <details> |
| | | <name xmlns:json=""http://www.samplenamespace.com/json"">Kippy</name> |
| | | <age xmlns:json=""http://www.samplenamespace.com/json"">26</age> |
| | | </details> |
| | | </Main> |
+------+---------+-----------------------------------------------------------------------+
列,以删除xml_data
节点以外的所有子节点的http://www.samplenamespace.com/json
名称空间。
我的查询:
<Main>
有帮助吗?
答案 0 :(得分:1)
由于必须清理两个元素,因此可以在xml_data列上使用sql replace从name元素和age元素中删除名称空间。 这样会将主要元素保留在所需的名称空间中。
How to replace a string in a SQL Server Table Column
create TABLE [dbo].[foo]
(
cid int not null,
cidtype varchar(1) null,
xml_data varchar(max) null
)
go
insert into foo (cid,cidtype,xml_data) values
(1001,'N','<Main xmlns:json=""http://www.samplenamespace.com/json"" >
<ID json:ValueType=""Number"">1001</ID>
<details>
<name xmlns:json=""http://www.samplenamespace.com/json"">John</name>
<age xmlns:json=""http://www.samplenamespace.com/json"">12</age>
</details>
</Main>')
insert into foo (cid,cidtype,xml_data) values (1003, 'N',
'<Main xmlns:json=""http://www.samplenamespace.com/json"" >
<ID json:ValueType=""Number"">1003</ID>
<details>
<name xmlns:json=""http://www.samplenamespace.com/json"">Diane</name>
<age xmlns:json=""http://www.samplenamespace.com/json"">25</age>
</details>
</Main>')
insert into foo (cid,cidtype,xml_data) values (1004,'N',
'<Main xmlns:json=""http://www.samplenamespace.com/json"" >
<ID json:ValueType=""Number"">1004</ID>
<details>
<name xmlns:json=""http://www.samplenamespace.com/json"">Kippy</name>
<age xmlns:json=""http://www.samplenamespace.com/json"">26</age>
</details>
</Main>')
go
select * from foo
update foo
set xml_data = replace(xml_data, 'name xmlns:json=""http://www.samplenamespace.com/json""', 'name ')
go
update foo
set xml_data = replace(xml_data, 'age xmlns:json=""http://www.samplenamespace.com/json""', 'age ')
go
select * from foo