MS SQL Trennen Zahlen/Buchstaben/Sonderzeichen

dsnakas

Benutzer
Beiträge
20
Hallo zusammen,

ich habe folgendes Problem:

Eine Spalte in einer Tabelle beinhaltet Hausnummer mit Zusatz. Ich will nur die Hausnummer in eine andere Spalte schreiben.
z.B.
"34a" ---neue Spalte ---> "34"
"123b" ---neue Spalte --->"123"
"12-b" ---neue Spalte --->"12"
"68 c" ---neue Spalte ---> 68

Ich haben schon versucht Lösungen im Internet zu finden und muss dazu sagen das ich in sachen Funktionen nicht wirklich viel verstehe....


Würde mich sehr freuen wenn ihr mir helfen könntet


Gruß
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
Das ist nicht ganz so trivial und ich vermisse schonmal einen weiteren klassischen Fall, Hausnr. 200-205 z.B...

Hiermit würdest du alles abschneiden, was hinter der letzten Zahl steht:
Code:
left(hausnr,len(hausnr)-(patindex('%[0-9]%',reverse(hausnr))-1))
 

dsnakas

Benutzer
Beiträge
20
Hi Ukule danke für die schnelle antwort.

Könntest du dein post ein wenig erläutern? Bin nicht soo fit in sql und würde gerne verstehen was genau passiert.

Ansich ist es für die Arbeit die mit den Nummer machen muss egal.
Wenn "2-6" da enthalten ist, brauch ich theoretisch nur die "2" wenn es "23/5" heisst brauch ich nur die "23".
Es geht nur darum später sagen zu können die Zahl ist gerade/ungerade und kleiner/größer als.
 

dsnakas

Benutzer
Beiträge
20
funktioniert wunder bar nun geht es noch darum bei z.b. 1-3 nur die 1 mitzunehmen bzw. bei 25/5 nur die 25...kann mir hier noch wer helfen?
 

akretschmer

Datenbank-Guru
Beiträge
9.042
funktioniert wunder bar nun geht es noch darum bei z.b. 1-3 nur die 1 mitzunehmen bzw. bei 25/5 nur die 25...kann mir hier noch wer helfen?

M$SQL kann keine regulären Ausdrücke, daher geht folgendes NICHT:

Code:
test=*# select regexp_replace('25-26','[^0-9].*','');
 regexp_replace
----------------
 25
(1 row)

test=*# select regexp_replace('25/26','[^0-9].*','');
 regexp_replace
----------------
 25
(1 row)

Du kannst aber mal googeln, z.B. nach "ms sql regex replace", da findest so Sachen wie http://stackoverflow.com/questions/150977/perform-regex-replace-in-an-sql-query, vielleicht findest Du da was.
 

ukulele

Datenbank-Guru
Beiträge
4.394
Sry musste meinen Post grade löschen, stand ja mein DB Name drin :eek: (Warum kann ich eigentlich keine Posts mehr bearbeitern? die sind immer leer...)

Hier nochmal in Kurzform:

Ich hab ne kleine Funktion geschrieben um es simpel zu halten. Da läuft eine Schleife und die prüft jedes Zeichen. Ist es nicht numerisch (und auch kein - was wohl auch numerisch ist) bricht die Schleife ab. Ist vieleicht etwas Overkill aber läßt sich schön anpassen.
Code:
CREATE FUNCTION    [dbo].[ziffern_filtern](@text VARCHAR(100))
 
RETURNS    VARCHAR(100)
 
AS
BEGIN
    DECLARE    @text_neu VARCHAR(100),
            @counter INT
 
    SET        @text_neu = ''
    SET        @counter = len(@text)
 
    WHILE    @counter > 0
    BEGIN
        IF        isnumeric(left(@text,1)) = 1
        AND        left(@text,1) != '-'
        BEGIN
            SET        @text_neu = @text_neu + left(@text,1)
            SET        @text = right(@text,len(@text)-1)
            SET        @counter = @counter - 1
        END
        ELSE
        BEGIN
            SET        @counter = 0
        END
    END
 
    RETURN    @text_neu
END
GO
Code:
SELECT    [datenbank].[dbo].[ziffern_filtern](hausnr),
        hausnr
FROM    tabelle
 
Werbung:

dsnakas

Benutzer
Beiträge
20
wow super vielen vielen dank funktioniert super! Muss mich nur noch damit beschäftigen wie das genau funktioniert! Ich danke dir vielmals!
 
Oben