列中包含以下內容。 abcd/ef/g/hij
。 /
之間的字符未動態修復。 我想在選擇查詢中將內容分成4個獨立的新列。將字符串拆分爲新列
已經回答的問題是不同的,我想將由/
分隔的字符串中的內容拆分成新的列。
列中包含以下內容。 abcd/ef/g/hij
。 /
之間的字符未動態修復。 我想在選擇查詢中將內容分成4個獨立的新列。將字符串拆分爲新列
已經回答的問題是不同的,我想將由/
分隔的字符串中的內容拆分成新的列。
如果你問我,最快特設的方法是把你的數據轉換成XML,並使用nodes()
方法:
declare @temp table (data nvarchar(max))
insert into @temp
select 'abcd/ef/g/hij' union all
select '1/2/3'
select t.data, n.c.value('.', 'nvarchar(max)')
from @temp as t
outer apply (select cast('<t>' + replace(t.data, '/', '</t><t>') + '</t>' as xml) as data) as d
outer apply d.data.nodes('t') as n(c)
您可以使用REPLACE
與'.'
更換'/'
。然後使用PARSENAME
拿到繩子的獨立部分:
CREATE TABLE #tmp (str VARCHAR(50))
INSERT INTO #tmp VALUES
('abcd/ef/g/hij'),
('1111111/222/33/4444')
SELECT PARSENAME(x.s, 4) AS [1], PARSENAME(x.s, 3) AS [2],
PARSENAME(x.s, 2) AS [3], PARSENAME(x.s, 1) AS [4]
FROM #tmp
CROSS APPLY (SELECT REPLACE(str, '/', '.')) AS x(s)
輸出:
1 2 3 4
---------------------
abcd ef g hij
1111111 222 33 4444
列中分發它,儘管我不會使用它,因爲它不應該執行OP所需的操作。它不會工作超過4個部分,它也可能返回不正確的結果像[[a]/[a]/[a]/[asd]' –
@羅馬字符串狀態:*我將始終有3/*(見註釋),唯一的問題是如果'str'列中有'。',但是也有一個解決方法(.i.e在替換''/''s之前用一個特殊的不存在的字符替換''。'')。 –
'[''符號將由您的解決方案刪除? –
你需要找到使用CHARINDEX的/字符的位置,切片串起來的方式。這將是一個很大的表達式,因爲要找到第三個斜槓,您需要使用CHARINDEX的第三個參數,傳遞另一個CHARINDEX的結果,該CHARINDEX也具有正在使用的第三個參數。除了最後一個(第四個)片段之外,還需要使用CHARINDEX在下一個斜線後查找和刪除文本。
像這樣的事情會在第三個斜槓後提取文本:
RIGHT(s, CHARINDEX('/', s, CHARINDEX('/', s, CHARINDEX('/', s)+1)+1)+1)
我離開其餘的你。
你會一直擁有3個''''你的字符串中的列數還可以動態嗎? – ughai
你能給出一個樣本數據和預期的輸出嗎? – artm
我會一直有3 /。所以列數量正在修復 –