我需要在KWR/50X50X5/1.4301
之间的/
或50x50x5
之间的字符串T-SQL
中提取文字。我尝试过使用Substing
,但是没有找到我。
最后,我需要在/
之间添加值(总和值)而不使用字符x
(例如,50 + 50 + 5 = 105
)我将非常感谢您的帮助。
答案 0 :(得分:0)
select substring(firstpart,1,CHARINDEX('/',firstpart)-1)
from
(select
substring(pattern,
CHARINDEX('/',pattern)+1,
datalength(pattern)) as firstpart
from tessst
)X;
答案 1 :(得分:0)
试试这个:
DECLARE @t TABLE (id INT, v VARCHAR(100) )
INSERT INTO @t
VALUES ( 1, 'PWPQ/80X20/1.4301' ) ,
( 2, 'PWO/120/1.4404' ),
( 3, 'PWOI/120X9X90X80/1.4404' )
;WITH cte1 AS(SELECT id, SUBSTRING(v,
CHARINDEX('/', v) + 1,
CHARINDEX('/', v, CHARINDEX('/', v) + 1) - CHARINDEX('/', v) - 1) AS v
FROM @t),
cte2 AS(SELECT id, CAST ('<X>' + REPLACE(v, 'X', '</X><X>') + '</X>' AS XML) AS v FROM cte1)
SELECT id, SUM(Split.a.value('.', 'int')) AS v
FROM cte2 a CROSS APPLY v.nodes ('/X') AS Split(a)
GROUP BY id
输出:
id v
1 100
2 120
3 299
第一个cte用于提取/
之间的值。
第二个cte用于将这些值转换为xml格式。
最后一个语句是将带有分隔符的字符串转换为单独行的标准技巧。