2015-10-29 177 views
2

我需要從/50x50x5T-SQL之間的字符串KWR/50X50X5/1.4301中提取文本。我試過使用Substing,但是,不會去找我。 最後,我需要在/之間添加值(總和值),而不是字符x(例如,50 + 50 + 5 = 105),我將非常感謝您的幫助。從字符串中提取文本

+0

僅供參考:http://stackoverflow.com/questions/27010295/split-alpha-and-numeric-using-sql –

+0

KWR/- X - X -/1.4301 ...這將被固定所有時間? –

+0

可以有'50X50X5X4X7'嗎?你能給所有可能的模式? –

回答

1

嘗試這種情況:

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爲/之間提取值。 將這些值轉換爲xml格式的第二個cte。 最後一條語句是用於將具有分隔符的字符串轉置爲分隔行的標準技巧。

+0

太棒了,沒有提到我在哪個表中有指定的文字(代碼)。我想做一個從表中選擇並指向記錄的ID,查詢將返回給我的價值。 Sory的困惑 – AdiT

+0

我想我會做程序標量 – AdiT

0
select substring(firstpart,1,CHARINDEX('/',firstpart)-1) 
from 
(select 
substring(pattern, 
       CHARINDEX('/',pattern)+1, 
       datalength(pattern)) as firstpart 
from tessst 
)X; 
+0

太棒了,我會需要更多的數字總和沒有字符x – AdiT

+0

@AdiT你只想要數字而不是X ??例如120x9x90x80這個你想要的120 9 90 80 ?? –

+0

我想要輸入這些數字的總和。謝謝 – AdiT