任何人都可以幫助我,我有一個關於如何獲得以下數據結果的問題。請參閱下面的示例數據。所以這個邏輯首先我想刪除數字前的字母,如果我得到同樣的事情繼續下去,我會刪除字母前的數字,以便我可以得到我想要的結果。連接和修剪字符串
表:
SALV3000640PIX32BLU
SALV3334470A9CARBONGRY
TP3000620PIXL128BLK
所需的輸出:
PIX32BLU
A9CARBONGRY
PIXL128BLK
任何人都可以幫助我,我有一個關於如何獲得以下數據結果的問題。請參閱下面的示例數據。所以這個邏輯首先我想刪除數字前的字母,如果我得到同樣的事情繼續下去,我會刪除字母前的數字,以便我可以得到我想要的結果。連接和修剪字符串
表:
SALV3000640PIX32BLU
SALV3334470A9CARBONGRY
TP3000620PIXL128BLK
所需的輸出:
PIX32BLU
A9CARBONGRY
PIXL128BLK
您需要使用SUBSTRING
和PATINDEX
功能
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
這太棒了!乾杯! :) –
它實際上得到我想要的!這次真是萬分感謝! –
我對此有一個疑問,對於PATINDEX('%[^ a-z]%',fielda),99)什麼是99? –
試試這個它可能會幫助你
;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
您是基於什麼原因決定添加的那些新行應該返回'null'?如果OP沒有提供足夠的信息來回答,那麼可能不值得編制新的標準,以便回答。 –
我剛剛添加了示例查詢只是爲了弄清楚他的需求,我沒有說這是他期望的確切結果 – 2017-07-26 09:57:16
要做到這一點,你可以使用
PATINDEX('%[0-9]%',FieldName)
,這將給你的第一個數字的位置,然後使用這個SUBSTRING或其他字符串函數之前修剪過的任何信件。 (在繼續下一步之前,您需要刪除第一個字母,因爲與CHARINDEX不同,PATINDEX函數中沒有起始點參數)。
然後在剩餘的字符串中使用
PATINDEX('%[a-z]%',FieldName)
找到剩下的字符串中的第一個字母的位置。現在,使用SUBSTRING剪掉在前面的號碼等
你會發現這個其他的解決有幫助
什麼是分裂背後的邏輯是什麼? – Matt
這是什麼問題?你究竟想要做什麼?在數字之後的第一個字母之前切掉所有內容?示例數據非常好,但它並沒有具體解釋您想要的內容,也沒有反映出您可能投入到查詢中的所有真實數據。你應該儘可能深入地解釋,以便人們可以提供相關的答案。這太不清楚了。 –
是的正是... @underscore_d –