私はそのようにパイプで区切られた数字を含む文字列を持っています23|12|12|32|43
。
SQLを使用して、各数値を抽出し、10を加算してから合計して、合計を求めます。
私はそのようにパイプで区切られた数字を含む文字列を持っています23|12|12|32|43
。
SQLを使用して、各数値を抽出し、10を加算してから合計して、合計を求めます。
別の方法は次のとおりです。
declare @str nvarchar(max) = '23|12|12|32|43';
set @str = 'select '+replace(@str, '|', '+');
exec(@str);
再帰共通テーブル式を使用した答え:
WITH cte AS (
SELECT
'23|12|12|32|43' + '|' AS string
,0 AS total
UNION ALL
SELECT
RIGHT(string, LEN(string) - PATINDEX('%|%', string))
,CAST(LEFT(string, PATINDEX('%|%', string) - 1) AS INT) + 10
FROM cte
WHERE PATINDEX('%|%', string) > 0
)
SELECT SUM(total) AS total FROM cte
再帰ターミネーターとして、ストリング内にパイプが他に存在するかどうかを確認しましたが、元のストリングの最後に余分なパイプを連結することで、最後の要素を見逃してしまいました。 WHERE句を表現するためのより良い方法です。
これを行う別の方法は次のとおりです。
DECLARE @s VARCHAR(1000) = '23|12|12|32|43'
SELECT CAST('<root><e>' + REPLACE(@s, '|', '</e><e>') + '</e></root>' AS XML)
.value('sum(/root/e) + count(/root/e) * 10', 'INT')
XML
これは、データ型とそれによって提供される関数へのキャストを使用します。
例としてこれを投稿しましたが、あなたのアプローチの方がはるかに優れたパフォーマンスを発揮します。