截断SQL Server中字符串中子字符串的第二次出现

时间:2017-02-03 03:27:13

标签: sql-server string-function

我有一个包含SELECT表达式的CASE查询。 我有一个' Total'带有文字的栏目' GrandTotalGroupTotal'。 第二列包含文字' GrandTotalGroup'。 要汇总列中的行' GrandTotalGroup'并把行,' GrandTotalGroupTotal'我在CASE语句中标识了正确的行,如下所示。

我需要截断最后一个' Total'从列值。 此SELECT语句有效。我想尽可能删除硬编码值 GrandTotalGroup

SELECT SUG3.LineOrder AS SNo, 
       CASE WHEN (Visits IS NULL) 
            THEN (SELECT SUM(ISNULL(CTE3.Visits, 0)) 
                  FROM CTE3 
                  WHERE CTE3.GroupSetName = 'GrandTotalGroup') 
            ELSE ISNULL(Visits, 0) END AS Visits 
FROM  UDSStaffUtilizationGroups SUG3 
          LEFT OUTER JOIN CTE3 ON CTE3.UDSStaffGroupID = SUG3.UDSStaffGroupID
GROUP BY SUG3.LineOrder, SUG3.GroupSetName, SUG3.GroupTotalName, CTE3.Visits

有没有办法使用字符串函数进行更改: GrandTotalGroupTotal GrandTotalGroup

2 个答案:

答案 0 :(得分:0)

如果我理解正确

SELECT SUBSTRING('GrandTotalGroupTotal', 1, 15)  

答案 1 :(得分:0)

Create function Replace2ndOccurance(@str varchar(500),@strTrunc varchar(100))
returns varchar(500)
as
begin
Return Replace(STUFF(STUFF(@str,patindex('%'+@strTrunc+'%',@str),len  (@strTrunc), '-'),patindex('%'+@strTrunc+'%',STUFF(@str,patindex('%'+@strTrunc+'%',@str),len(@strTrunc), '-')),len(@strTrunc),''),'-',@strTrunc)    
end
select dbo.Replace2ndOccurance('GrandTotalGroupTotal','Total')