繁体   English   中英

在第3个和第4个管道定界符之间选择字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM