[英]select string between 3rd and 4th pipe delimiter
我有一列,其中包含諸如
Column
Asset|Class1|Category1|Group1|Account1
Expense|Class23|Category23|Group23|Account23
我想在管道定界符的第3次到第4次出現之間選擇字符串,如何實現呢?
我已經嘗試了PARSENAME和charindex + stuff函數,但是它們有局限性,例如最多128個字符。 另外,我們的SQL Server對正則表達式的支持有限。 有任何想法嗎?
SELECT REVERSE(PARSENAME(REVERSE(replace(LTRIM(Column),'|','。'))),3))
我的選擇需要返回:Group1 Group23
也許這會有所幫助
例
Declare @YourTable table (ID int,[Column] varchar(max))
Insert Into @YourTable values
(1,'Asset|Class1|Category1|Group1|Account1')
,(2,'Expense|Class23|Category23|Group23|Account23')
Select ID
,SomeValue = convert(xml,'<x>' + replace([Column],'|','</x><x>')+'</x>').value('/x[3]','varchar(100)')
From @YourTable
返回
ID SomeValue
1 Category1
2 Category23
如果您有2016+,也可以使用STRING_SPLIT()
CREATE TABLE T(
ID INT IDENTITY(1,1),
Str VARCHAR(45)
);
INSERT INTO T(Str) VALUES
('Asset|Class1|Category1|Group1|Account1'),
('Expense|Class23|Category23|Group23|Account23');
SELECT V Str
FROM (
SELECT Value V,
ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) RN
FROM T CROSS APPLY STRING_SPLIT(Str, '|')
) TT
WHERE RN = 3;
返回:
Str
---------
Category1
Category23
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.