Zahl un/gerade ms sql

dsnakas

Benutzer
Beiträge
20
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
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.520
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

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?
 

dsnakas

Benutzer
Beiträge
20
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.
 

ukulele

Datenbank-Guru
Beiträge
4.637
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
 

dsnakas

Benutzer
Beiträge
20
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.
 

dsnakas

Benutzer
Beiträge
20
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
 

akretschmer

Datenbank-Guru
Beiträge
9.520
also habe es folgendermaßen gelöst:

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.
 
Werbung:
Oben