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

Zahl un/gerade ms sql

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

  1. dsnakas

    dsnakas Benutzer

    Hi zusammen,

    ich bräuchte hilfe bei folgenden Thema:

    Ich habe ein Feld "Hausnummer" dieses enthält (hoffentlich) nur Zahlen.

    Jetzt will ich prüfen ob die Hausnummer gerade oder ungerade ist. Wenn die Zahl gerade ist soll in ein zusätzliches Feld "Status" ein "G" eingetragen werden ansonsten ein "U".

    1. Wie prüfe ich ob im Feld/Spalte "Hausnummer" nur Zahlen enthalten sind
    2. Wie setze ich die Prüfung auf gerade und ungerade mit dem Update in das Feld/Spalte "Status" um

    Vielen Dank schon mal!

    Gruß
    Nakas
     
  2. akretschmer

    akretschmer Datenbank-Guru

    1.
    Wenn da nur Zahlen rein sollen, dann nur Zahlen zulassen, also passende Datentypen verwenden.


    2.
    Mathe, so 2. Klasse oder so ;-)

    Code:
    test=*# create table dsnakas as select * from generate_series(1,8) s;
    SELECT 8
    test=*# select s, case when s%2 = 0 then 'das ist gerade' end as "gerade?" from dsnakas ;
     s |    gerade?
    ---+----------------
     1 |
     2 | das ist gerade
     3 |
     4 | das ist gerade
     5 |
     6 | das ist gerade
     7 |
     8 | das ist gerade
    (8 rows)
    

    3., nicht gestellte Frage:

    was machst Du bei 27/3b als Hausnummer?
     
  3. dsnakas

    dsnakas Benutzer

    Hi akretschmer,

    das es vom Mathematischen nicht schwierig ist war mir schon klar ;) deine Lösung ist ansich in Ordnung aber du überschreibst in dem Fall das HausnummernFeld was aber erhalten bleiben soll oder sehe ich das falsch? Ich will das Ergebnis in das Feld "Status" eintragen.


    Zu deiner Frage "3., nicht gestellte Frage:

    was machst Du bei 27/3b als Hausnummer?"

    Naja ich habe gerade geprüft und es gibt tatsächlich noch einträge wie z.B. "1+2", 44+46" hier muss ich mir eine Lösung ausdenken die nur die erste Zahl mitnimmt. --> aus "44+46" mach "44" etc. Somit sollte dieses problem behoben sein.
     
  4. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT    *
    FROM    tabelle
    WHERE    isnumeric(spalte) = 0
    Gibt alle Datensätz zurück die nicht numerisch sind.

    Bei grade/ungrade hab keine Funktion im Kopf aber ein gutes altes Hilfsmittel ist das Runden. Bei einem INT z.B. so:
    Code:
    SELECT    *
    FROM    tabelle
    WHERE    spalte/2*2 = spalte
     
  5. dsnakas

    dsnakas Benutzer

    Sonderzeichen in den Hausnummern habe ich mit hilfe von ukulele letzte Woche schon entfernt. ukulele für deine Funktion nochmals danke ;) und als info das "+" zählt wie das "-" auch als numerischer Wert.
     
  6. dsnakas

    dsnakas Benutzer

    also habe es folgendermaßen gelöst:

    Code:
    Update Tabelle_test
    set Tabelle_test.Un_Gerade =
        CASE
            WHEN Tabelle_test.hausnummer % 2 = 0
        THEN 'G'
        ELSE 'U'
        END
    FROM Tabelle_test
    go
    funktioniert so ganz gut VORSICHT NULL WERTE SIND SOMIZ GERADE
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Das Proble an Deiner Lösung ist, daß Du nun Redundanzen hast und irgend wann auch mal inkonsistente Daten. Das, was beim SELECT berechenbar ist, speichert man nicht in der Tabelle. Irgend wann änderst Du eine Hausnummer und 'vergißt' dabei, das Un_gerade - Feld anzupassen. Peng.
     
  8. dsnakas

    dsnakas Benutzer

    Naja das ist ein Prozess. Sprich kommen neue Daten muss er komplett neu durchgeführt werden.
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Nein, ein Verstoß gegen die Regel, Redundanz zu vermeiden ;-)
     
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