2016-06-25 7 views
0

schrieb ich die folgende Abfrage in T-SQL für SQL ServerFehler mit SELECT CASE mit regulärem Ausdruck

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 

Was ich will, ist, dass, wenn die Spalte ADDR_LINE_1 mit einer Zahl beginnt, mag ich von den HOUSE_NUMBER extrahieren es. Aber jetzt gibt meine Abfrage einen Parse-Fehler. Wenn ich das Wort REGEXP durch LIKE ersetze, verschwindet der Parse-Fehler, aber ich bekomme immer NULL für HOUSE_NUMBER. Was ist die korrekte Syntax für meine Abfrage?

+0

Was ist Ihre MS SQL Server-Version? Soweit ich weiß, unterstützt MS SQL Server keine regulären Ausdrücke. –

Antwort

1

Sie ISNUMERIC und LEFT wie diese verwenden könnten.

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

Wie über die 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

Dies würde nicht funktionieren für 'Wohnung 1A', etc – PeteGO

+0

Dies endete mir zu helfen' WENN ADDR_LINE_1 Like '[0-9]%' ' – John

+0

Noch besser. Sie können auch prüfen, ParseName() –

Verwandte Themen