Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

MS SQL Trennen Zahlen/Buchstaben/Sonderzeichen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von dsnakas, 22 August 2013.

  1. dsnakas

    dsnakas Benutzer

    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ß
     
  2. ukulele

    ukulele Datenbank-Guru

    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))
     
  3. dsnakas

    dsnakas Benutzer

    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.
     
  4. dsnakas

    dsnakas Benutzer

    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?
     
  5. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  6. ukulele

    ukulele Datenbank-Guru

    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
     
  7. dsnakas

    dsnakas Benutzer

    wow super vielen vielen dank funktioniert super! Muss mich nur noch damit beschäftigen wie das genau funktioniert! Ich danke dir vielmals!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden