我想一個XML字符串轉換是這樣的:轉換倍數XML節點的數據爲VARCHAR
'<orga_label>ORG1</orga_label><orga_label>ORG2</orga_label><orga_label>ORG3</orga_label>'
爲VARCHAR這樣的:
'ORG1, ORG2, ORG3'
在T-SQL中的一個查詢。
這可能嗎?
我想一個XML字符串轉換是這樣的:轉換倍數XML節點的數據爲VARCHAR
'<orga_label>ORG1</orga_label><orga_label>ORG2</orga_label><orga_label>ORG3</orga_label>'
爲VARCHAR這樣的:
'ORG1, ORG2, ORG3'
在T-SQL中的一個查詢。
這可能嗎?
你可以保持非常簡單,避免XML方法在這裏...
DECLARE @foo xml = '<orga_label>ORG1</orga_label><orga_label>ORG2</orga_label><orga_label>ORG3</orga_label>';
SELECT
REPLACE(
REPLACE(
REPLACE(
CONVERT(nvarchar(4000), @foo), '</orga_label><orga_label>', ', '
),
'<orga_label>', ''
),
'</orga_label>', ''
);
編輯:這有一個優勢,不是調用XML方法和處理器。
非常感謝,效果很好。:-) – user2307458 2013-04-22 13:23:45
你最好在腳本語言中使用xml解析器,比如ruby。
require 'rexml/document'
xml =REXML::Document.new(File.open"filename/filename.XML")
xml.each_element('//(your element)') do |sdobi|
puts sdobi.attributes["orga_label"]
end
如果你真的想用SQL,它是一個有點comeplex:
SELECT SUBSTRING(columnname, LOCATE('<orga_label',columnname) +12, LOCATE('</', tablename)) from tablename
的,如果子不正確的嘗試更改號碼
LOCATE不是T-SQL函數,我使用CHARINDEX。 結果不好: BPACA 我不能使用其他語言,因爲我使用框架。 :-( – user2307458 2013-04-22 13:22:31
declare @xml xml = '<orga_label>ORG1</orga_label><orga_label>ORG2</orga_label><orga_label>ORG3</orga_label>';
select stuff((select
',' + s from (
select
a.b.value('(.)[1]', 'varchar(50)') s
from @xml.nodes('/orga_label') a(b)
) t
for xml path('')
),1,1,'');
請問這是一個變量還是一列? – gbn 2013-04-22 13:01:25
此外,這是不正確的沒有根節點的XMl – gbn 2013-04-22 13:14:55