这是我当前的查询
DECLARE @x varchar(100)
SET @x = '110_DT_H55_VXELQ318_10Q'
SELECT left(@x, CHARINDEX('_', REVERSE(@x)) )
这是我想要的结果:
VXELQ318_10Q
答案 0 :(得分:2)
您可以将字符串转换为XML并获取第4个片段:
DECLARE @x varchar(100)
SET @x = '110_DT_H55_VXELQ318_10Q'
SELECT CAST('<x>' + REPLACE(@x,'_','</x><x>') + '</x>' AS XML).value('/x[4]','nvarchar(100)');
这将返回 VXELQ318
替换将创建类似XML的
<x>110</x>
<x>DT</x>
<x>H55</x>
<x>VXELQ318</x>
<x>10Q</x>
原生XML方法.value()
允许您按元素的位置来寻址。
以下内容将返回位置为>=4
的所有片段
DECLARE @x varchar(100)
SET @x = '110_DT_H55_VXELQ318_10Q'
SELECT STUFF(
CAST('<x>' + REPLACE(@x,'_','</x><x>') + '</x>' AS XML)
.query('for $nd in /x[position()>=4]/text()
return <y>{concat("_",$nd)}</y>')
.value('.','nvarchar(100)'),1,1,'');
这将返回 VXELQ318_10Q
答案 1 :(得分:1)
这是使用PARSENAME的另一个选项。假设您的数据中没有任何句点,否则将无法正常工作。
DECLARE @x varchar(100)
SET @x = '110_DT_H55_VXELQ318_10Q'
select parsename(replace(right(@X, len(@x) - charindex('_', @X)), '_', '.'), 2) + '_' + parsename(replace(right(@X, len(@x) - charindex('_', @X)), '_', '.'), 1)