如何在以下条件下从Offset Group
列和列中获取值?HedgeId
SecurityGroupId
获取的值应包含列中提到的字符串- 从
Offset Group
column 和HedgeId
Column 获取的值应该只包含剩余的字符串,该字符串位于SecurityGroupId
.
如何在以下条件下从Offset Group
列和列中获取值?HedgeId
SecurityGroupId
获取的值应包含列中提到的字符串Offset Group
column 和HedgeId
Column 获取的值应该只包含剩余的字符串,该字符串位于SecurityGroupId
.请使用下面的查询,
select
parsename(replace(OffsetGroup,SecurityGroupID,'.'),1) as [Offset Group],
parsename(replace(HedgeID,SecurityGroupID,'.'),1) as [HedgeID]
from @TableName
where OffsetGroup like '%'+SecurityGroupID+'%'
and HedgeID like '%'+SecurityGroupID +'%'
您可以使用将行与条件匹配来拆分Offset Group
和HedgeID
值,然后使用带有 XML 转换的 CTE 将数据作为列检索:SecurityGroupID
like
declare @tmp table(SecurityGroupID varchar(10), OffsetGroup nvarchar(50), HedgeID varchar(50))
insert into @tmp values
('S1G', 'OG139099S1G36', 'HG139099S1G1')
,('S1G', 'OG139099S1G36', 'HG139099S1G2')
,('S1G', 'OG139099S1G36', 'HG139099S1G3')
,('S1G', 'OG139099S1G36', 'HG139099S1G4')
,('S1G', 'OG139099S1G36', 'HG139099S2G4')
,('S1G', 'OG139099S2G36', 'HG13909912G4')
;WITH CTEwithSplittedValues AS
(
select
CAST('<x>' + REPLACE(OffsetGroup, SecurityGroupID,'</x><x>') + '</x>' AS XML) AS Offset_Group
,CAST('<x>' + REPLACE(HedgeID, SecurityGroupID,'</x><x>') + '</x>' AS XML) AS Hedge_ID
from @tmp
where OffsetGroup like '%' + SecurityGroupID + '%'
and HedgeID like '%' + SecurityGroupID + '%'
)
SELECT
Offset_Group.value(N'/x[2]','varchar(50)') AS [Offset Group]
,Hedge_ID.value(N'/x[2]','varchar(50)') AS [HedgeID]
FROM CTEwithSplittedValues;
这是最终输出:
最后两行没有被提取,因为在和SecurityGroupID
中都没有找到,而只在其中一个中找到。Offset Group
HedgeID