Vergleichsoperatoren für varchar?

Gwahlers

Benutzer
Beiträge
12
Guten Tag,
über ein php Formular werden Daten "03" und "01" zu eine Ziffernfolge "0301" zusammengefügt. Diese werden derzeit in ein Feld varchar gespeichert, da die führende 0 erhalten bleiben soll. Ich möchte dann aber durch eine Abfrage die Einträge erhalten die Beispielsweise größer sind als "0223". Kann man für ein varchar-Feld eine solche Abfrage starten? Oder ist dies nur für INT Felder möglich?

SELECT * FROM (tabelle) WHERE datum>='0223';

Wenn ich die Daten in ein Feld mit INT packe, wird natürlich die führende Null entfernt. Oder kann man ein Standard definieren, der dies verhindert?
 
Werbung:
Du kannst einen TEXT nach INT casten, und Du kannst einen INT bei der Ausgabe passend formatieren. Wenn Du rechnen willst böte sich ein Datentyp an, der dazu geeignet ist. Ein Datum '0223' ist übrigens Bullshit.
 
Es handelt sich bei diesem Projekt um eine Geburtstagsliste, die nur dann Daten anzeigt, wenn der aktuelle Benutzer seinen Geburtstag eingetragen hat. Ich hätte dies alles gerne über DATE gemacht, es darf allerdings keine Jahreszahl mitgegeben werden.
Das Formular nimmt 00 als Tag an und 00 als Monat an. Diese werden umgekehrt zum vierstelligen String, damit ich diese bei der SELECT abfrage sortieren kann. Im Nachhinein wird diese 4 stellige zahl wieder zu einem 23.02. Datum ausgegeben. Dies haut auch alles hin. Allerdings scheitere ich dann bei dem Thema "Geburtstage in den nächsten 2 Wochen anzeigen". Ich bin auf dem Gebiet ein "Einsteiger". Ansonsten hätte ich dies auch anders gemacht. Noch einmal zu der Kernfrage. Könnte man, unabhängig von der richtigen Syntax eine oben genannte SELECT-Abfrage für ein varchar feld durchführen?
 
Wenn der Benutzer sieht, dass er sein Geburtsjahr angeben soll, dann geht er auch davon aus, dass dies an alle Kollegen ausgegeben wird. Dies will ich ja gerade in einer Datenschutzkonformen Geburtstagsliste für das Intranet nicht.
Zur Not könnte ich immer nur die "Geburtstage des Tages" anzeigen. DIe könnte ich über die php Funktion date() regeln.
 
Das, was in der DB steht, muß nicht das sein, was in einer Liste ausgegeben wird. Um aber zu berechnen, wer im Zeitraum zwischen heute und heute + 14 Tage Geburtstag hat ist es sinnvoll, mit DATE zu arbeiten. Es gibt ansonsten so Fallstricke wie Monatswechsel, Jahreswechsel, Schaltjahr, ...
 
Es gibt ansonsten so Fallstricke wie Monatswechsel, Jahreswechsel, Schaltjahr,
Genau diese Fallstricke beschäftigen mich.
Wie sähe eine Abfrage für die nächsten 14 Tage aus?
SELECT * FROM (Tabelle) WHERE datum=?

Kann man ein Eingabefeld <input> so formatieren, dass es kein Jahr annehmen wird? Habe bis jetzt nur <input type='month'> kennen gelernt. Welches JJJJ.MM annimmt. Was natürlich auch nicht benutzerfreundlich ist.
 
Code:
test=*# select * from geb ;
 id |  d
----+------------
  1 | 2000-09-18
  2 | 2001-10-18
(2 rows)

test=*# select * from geb where extract(year from age(d)) != extract(year from age(current_date + '14days'::interval, d));
 id |  d
----+------------
  1 | 2000-09-18
(1 row)

test=*# select * from geb where extract(year from age(d)) != extract(year from age(current_date + '34days'::interval, d));
 id |  d
----+------------
  1 | 2000-09-18
  2 | 2001-10-18
(2 rows)
[/code[]

Der Rest ist Ausgabeformatierung.

[code]
test=*# select *, to_char(d, 'dd.mm') from geb where extract(year from age(d)) != extract(year from age(current_date + '34days'::interval, d));
 id |  d  | to_char
----+------------+---------
  1 | 2000-09-18 | 18.09
  2 | 2001-10-18 | 18.10
(2 rows)
 
Das ist schon eher was ich bräuchte. Allerdings kommt es zu einen Syntaxfehler... Ich führe aus:
select * from rai_geburtstage where extract(year from age(datum)) != extract(year from age(current_date + '34days'::interval, datum));

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '::interval, datum))' at line 1

In der Tabelle sind die gleichen Geburtstage vorhanden wie im Beispiel.
 
Werbung:
Zurück
Oben