从字符串中提取文本

时间:2015-10-29 08:31:53

标签: sql sql-server tsql

我需要在KWR/50X50X5/1.4301之间的/50x50x5之间的字符串T-SQL中提取文字。我尝试过使用Substing,但是没有找到我。 最后,我需要在/之间添加值(总和值)而不使用字符x(例如,50 + 50 + 5 = 105)我将非常感谢您的帮助。

2 个答案:

答案 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格式。 最后一个语句是将带有分隔符的字符串转换为单独行的标准技巧。