2017-07-26 54 views
-2

任何人都可以幫助我,我有一個關於如何獲得以下數據結果的問題。請參閱下面的示例數據。所以這個邏輯首先我想刪除數字前的字母,如果我得到同樣的事情繼續下去,我會刪除字母前的數字,以便我可以得到我想要的結果。連接和修剪字符串

表:

SALV3000640PIX32BLU 
SALV3334470A9CARBONGRY 
TP3000620PIXL128BLK 

所需的輸出:

PIX32BLU 
A9CARBONGRY 
PIXL128BLK 
+1

什麼是分裂背後的邏輯是什麼? – Matt

+1

這是什麼問題?你究竟想要做什麼?在數字之後的第一個字母之前切掉所有內容?示例數據非常好,但它並沒有具體解釋您想要的內容,也沒有反映出您可能投入到查詢中的所有真實數據。你應該儘可能深入地解釋,以便人們可以提供相關的答案。這太不清楚了。 –

+0

是的正是... @underscore_d –

回答

4

您需要使用SUBSTRINGPATINDEX功能

SELECT 
SUBSTRING(SUBSTRING(fielda,PATINDEX('%[^a-z]%',fielda),99),PATINDEX('%[^0-9]%',SUBSTRING(fielda,PATINDEX('%[^a-z]%',fielda),99)),99) AS youroutput 
FROM yourtable 

輸入

yourtable的組合

fielda 
SALV3000640PIX32BLU 
SALV3334470A9CARBONGRY 
TP3000620PIXL128BLK 

輸出

youroutput 
PIX32BLU 
A9CARBONGRY 
PIXL128BLK 

SQL小提琴:http://sqlfiddle.com/#!6/5722b6/29/0

+0

這太棒了!乾杯! :) –

+0

它實際上得到我想要的!這次真是萬分感謝! –

+0

我對此有一個疑問,對於PATINDEX('%[^ a-z]%',fielda),99)什麼是99? –

0

試試這個它可能會幫助你

;With cte (Data) 
AS 
(
SELECT 'SALV3000640PIX32BLU' UNION ALL 
SELECT 'SALV3334470A9CARBONGRY' UNION ALL 
SELECT 'SALV3334470A9CARBONGRY' UNION ALL 
SELECT 'SALV3334470B9CARBONGRY' UNION ALL 
SELECT 'SALV3334470D9CARBONGRY' UNION ALL 
SELECT 'TP3000620PIXL128BLK' 
) 
SELECT * , CASE WHEN CHARINDEX('PIX',Data)>0 THEN SUBSTRING(Data,CHARINDEX('PIX',Data),LEN(Data)) 
       WHEN CHARINDEX('A9C',Data)>0 THEN SUBSTRING(Data,CHARINDEX('A9C',Data),LEN(Data)) 
       ELSE NULL END AS DesiredResult FROM cte 

結果

Data     DesiredResult 
------------------------------------- 
SALV3000640PIX32BLU  PIX32BLU 
SALV3334470A9CARBONGRY A9CARBONGRY 
SALV3334470A9CARBONGRY A9CARBONGRY 
SALV3334470B9CARBONGRY NULL 
SALV3334470D9CARBONGRY NULL 
TP3000620PIXL128BLK  PIXL128BLK 
+2

您是基於什麼原因決定添加的那些新行應該返回'null'?如果OP沒有提供足夠的信息來回答,那麼可能不值得編制新的標準,以便回答。 –

+0

我剛剛添加了示例查詢只是爲了弄清楚他的需求,我沒有說這是他期望的確切結果 – 2017-07-26 09:57:16

1

要做到這一點,你可以使用

PATINDEX('%[0-9]%',FieldName) 

,這將給你的第一個數字的位置,然後使用這個SUBSTRING或其他字符串函數之前修剪過的任何信件。 (在繼續下一步之前,您需要刪除第一個字母,因爲與CHARINDEX不同,PATINDEX函數中沒有起始點參數)。

然後在剩餘的字符串中使用

PATINDEX('%[a-z]%',FieldName) 

找到剩下的字符串中的第一個字母的位置。現在,使用SUBSTRING剪掉在前面的號碼等

你會發現這個其他的解決有幫助

SQL to find first non-numeric character in a string