2016-06-25 39 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() –