Усечение 2-го вхождения подстроки в строке в SQL Server
У меня есть SELECT
запрос, который содержит CASE
выражение. У меня есть столбец "Всего" с текстом "GrandTotalGroupTotal". Есть второй столбец с текстом "GrandTotalGroup". Чтобы суммировать строки в столбце "GrandTotalGroup" и поместить строку "GrandTotalGroupTotal", я определяю правильные строки в операторе CASE, как показано ниже.
Мне нужно обрезать последний "Итого" из значения столбца. Это утверждение 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 ответа
Если я правильно поняла
SELECT SUBSTRING('GrandTotalGroupTotal', 1, 15)
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')