来自字符SQL的子串

时间:2014-10-03 19:54:14

标签: sql character substring

我有一个字符串 -

CO_CS_SV_Integrate_WP_BalancingCostRiskandComplexityinYourDRStrat_Apr君

或者

CO_CS_SV_CommVaultTapSponsorship_WP_GartnerNewsletterSmartIdeaforBigData_Jan-MAR

或者

CO_CS_IA_eMedia_WP_Top5eDiscoveryChallengesSolved_Apr君

我需要获取与广告系列名称中的广告系列相关联的资产名称。 例如,“在您的DR Strat中平衡成本风险和复杂性” 将是与第一个活动相关的资产 -

“CO_CS_SV_Integrate_WP_的 BalancingCostRiskandComplexityinYourDRStrat _Apr君”

这是我的目标。我希望从字符串中获得这一点(“在DR Strat中平衡成本风险和复杂性”。 但我不知道如何从广告系列名称中删除资产。它在位置或其他方面不一致??? 我想我可以从右边开始找到第二个“_” 但我不知道语法。我得到了 -

选择campaign.name ,Right(campaign.name,charindex('_',REVERSE(campaign.name)))作为测试 来自广告系列

给了我 - _Apr君

非常感谢任何帮助或指示

感谢。

1 个答案:

答案 0 :(得分:1)

您可以创建一个接受字符串的标量函数,如下所示:

CREATE FUNCTION myFunction
(
@str varchar(300)
)
RETURNS varchar(300)
AS
BEGIN

 declare @reverse varchar(200),@idx1 int,@idx2  int

 set @reverse = reverse(@str)

 set @idx1 =  CHARINDEX('_',@reverse)

 set @idx2 =  CHARINDEX('_',@reverse,@idx1+1)

 return  reverse(substring(@reverse,@idx1+1,@idx2-@idx1-1))

END

您可以尝试使用以下示例:

select dbo.myFunction('CO_CS_SV_Integrate_WP_BalancingCostRiskandComplexityinYourDRStrat_Apr-Jun');