消息关闭
    暂无新消息!
假设我有一张源表 customer_account中有一个字段 crm_id_content ,字段的内容大概为这种模式
<r><u id="{F7898717-4954-E123-A3C8-3C4A67E86D2E}" n="招商银行南京分行"/><u id="{A27BFB89-5F20-E451-A8BB-3C4A92E86D2E}" n="厦门银行"/></r>

现在的要求是将整个字段中的 id ,也就是“F7898717-4954-E123-A3C8-3C4A67E86D2E”  和 “A27BFB89-5F20-E451-A8BB-3C4A92E86D2E”这两个字符串取出来,插入到目标表customer_account_mubiao中的crm_customer_id字段中,id与id中间用“;”隔开,当然,源表的源字段中的id是不固定的,有些是有两个id,有些是3个id,有些事1个id,但是id的长度都是固定的36位,求各位大神帮帮忙啊

3个回答

︿ 1


;WITH customer_account(crm_id_content) AS (
SELECT  N'<r><u id="{F7898717-4954-E123-A3C8-3C4A67E86D2E}" n="招商银行南京分行"/><u id="{A27BFB89-5F20-E451-A8BB-3C4A92E86D2E}" n="厦门银行"/></r>' 


SELECT tt.id,tt.[name] FROM (
SELECT *,CONVERT(XML,crm_id_content) AS xml_crm_id_content FROM customer_account
) t
CROSS APPLY (SELECT b.value('@id','VARCHAR(100)') AS id,b.value('@n','NVARCHAR(500)') AS [name] FROM t.xml_crm_id_content.nodes('r/u') s(b)) tt

/*
id name
{F7898717-4954-E123-A3C8-3C4A67E86D2E} 招商银行南京分行
{A27BFB89-5F20-E451-A8BB-3C4A92E86D2E} 厦门银行
*/
︿ 1

;WITH customer_account(crm_id_content) AS (
SELECT  '<r><u id="{F7898717-4954-E123-A3C8-3C4A67E86D2E}" n="招商银行南京分行"/><u id="{A27BFB89-5F20-E451-A8BB-3C4A92E86D2E}" n="厦门银行"/></r>' 


SELECT tt.id FROM (
SELECT *,CONVERT(XML,crm_id_content) AS xml_crm_id_content FROM customer_account
) t
CROSS APPLY (SELECT b.value('@id','VARCHAR(100)') AS id FROM t.xml_crm_id_content.nodes('r/u') s(b)) tt

/*
id
{F7898717-4954-E123-A3C8-3C4A67E86D2E}
{A27BFB89-5F20-E451-A8BB-3C4A92E86D2E}
*/