2016-06-25 57 views
0

我寫在T-SQL下面的查詢的SQL Server錯誤與正則表達式SELECT CASE

SELECT 
    CASE 
     WHEN ADDR_LINE_1 REGEXP '^[0-9]' 
     THEN SUBSTRING(ADDR_LINE_1,1,CHARINDEX(' ',ADDR_LINE_1)) 
     ELSE NULL 
    END AS HOUSE_NUMBER 
FROM CUSTOMER 

我想的是,如果該列ADDR_LINE_1以數字開頭,我想提取從HOUSE_NUMBER它。但現在我的查詢給出了一個解析錯誤。如果我用LIKE替換REGEXP這個詞,解析錯誤消失,但我總是爲HOUSE_NUMBER獲得NULL。我的查詢的正確語法是什麼?

+0

什麼是您的MS SQL Server版本?據我所知MS SQL Server不支持正則表達式。 –

回答

1

你可以使用ISNUMERICLEFT這個樣子。

SELECT 
    CASE WHEN ISNUMERIC(LEFT(ADDR_LINE_1, 1)) = 1 
    THEN SUBSTRING(ADDR_LINE_1, 1, CHARINDEX(' ', ADDR_LINE_1)) 
    ELSE NULL 
    END AS HOUSE_NUMBER 
FROM CUSTOMER 
1

如何使用LIKE

SELECT 
    CASE 
     WHEN ADDR_LINE_1 Like '%[0-9]%' 
     THEN SUBSTRING(ADDR_LINE_1,1,CHARINDEX(' ',ADDR_LINE_1)) 
     ELSE NULL 
    END AS HOUSE_NUMBER 
FROM CUSTOMER 
+1

這不適用於'平板1A'等 – PeteGO

+0

這最終會幫助我'當ADDR_LINE_1喜歡'[0-9]%'' – John

+0

更好。你也可能想考慮ParseName() –