Попробуйте это
Предполагая, что первая часть строки до первой "|"можно игнорировать. Не уверен, какую версию SQL вы используете, но если он меньше, чем SQL2016, используйте этот разделитель строк
DECLARE @s NVARCHAR(50) = '<"FOSTIMON 75 M.J.>|4|4|4|3|3|3|3|3|3|3|3|3||||||||||||||||||||||||||||'
SELECT
SUM(CONVERT(INT, S.[Value]))
FROM dbo.DelimitedSplit8K(@s, '|') S
WHERE S.RN >= 2 AND S.RN <= 13
Если вы используете SQL2012 +, вы можете использовать TRY_PARSE и вообще избавьтесь от предложения WHERE
SELECT
SUM(
CASE
WHEN TRY_PARSE(S.[Value] AS INT) IS NOT NULL
THEN CONVERT(INT, S.[Value])
ELSE 0
END
--CONVERT(INT, S.[Value])
)
FROM dbo.DelimitedSplit8K(@s, '|') S
Если вы используете SQL2016 +, тогда используйте встроенную функцию String_Split
SELECT
SUM(
CASE
WHEN TRY_PARSE(S.[Value] AS INT) IS NOT NULL
THEN CONVERT(INT, S.[Value])
ELSE 0
END
)
FROM STRING_SPLIT(@s, '|') S