我試圖僅從.dbo.ProductCodes table
我有:
| 產品代碼 |
|---|
| XXX 8361229 BB |
| XY 0060482 AB |
| CR 0058882 A 1 |
| 心肺復蘇術777093219 |
| CPCODE 0002835 |
我想要:
| 產品代碼 |
|---|
| 8361229 BB |
| 0060482 AB |
| 0058882 A 1 |
| 777093219 |
| 0002835 |
如果字母僅位于字串的開頭,我可以使用 regex 洗掉所有字母[^a-zA-z]。問題是字母不僅出現在字串的開頭。
編輯:另外,我想對這個邏輯應用一些排除。例如,如果前綴是“AA”或“Q”或“QA”,我不想洗掉字串開頭的字母。示例:Q12345、AA1234S、QA12345
uj5u.com熱心網友回復:
針對更改的要求進行了更新:
SELECT ProductCode,
Adjusted = SUBSTRING(ProductCode,
CASE WHEN ProductCode NOT LIKE 'Q%'
AND ProductCode NOT LIKE 'QA%'
AND ProductCode NOT LIKE 'AA%' THEN
PATINDEX('%[0-9]%', ProductCode '0')
ELSE 1 END, 255)
FROM dbo.ProductCodes;
- 示例db<>fiddle還處理無字母和所有字母(空結果)。
uj5u.com熱心網友回復:
而不是SUBSTRING,我個人會使用STUFF,因為這樣您就不必定義要保留多少個字符的長度,這意味著這將適用于任何長度的字串。我也切換到尋找第一個非字母字符,而不是第一個數字,只是為了顯示差異。
SELECT ProductCode,
STUFF(ProductCode, 1, ISNULL(NULLIF(PATINDEX('%[^A-z]%', ProductCode),0)-1,0),'')
FROM dbo.ProductCodes;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435479.html
