WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   MYSQL Datumsvergleich (http://www.wcm.at/forum/showthread.php?t=122179)

darthj 15.01.2004 22:30

MYSQL Datumsvergleich
 
Hallo

Habe folgendes Problem, die Abfrage liefert immer nix zurück. Obwohl es Datensätze in diesem Datumsbereich gibt.

Statement:
SELECT * from Veranstaltung where Datum >= "2004-01-01" and Datum <="2004-31-01"

_m3 16.01.2004 01:52

Und wie ist das Feld "Datum" definiert?

(V)uh 16.01.2004 04:22

Erstens würde ich [Datum] schreiben und nicht Datum und zwotens machst du einen textvergleich und wenn du ein datumsfeld mit einem text vergleichst geht das meist in die hose :)

Schreib das datum als #1/1/2004# denn " ist das zeichen für text.
Und keine bindestriche sondern / ... dann sollte es auch mit dem nachbarn klappen ;)

darthj 16.01.2004 08:22

Das Feld Datum ist als Date definiert. Dachte wenn ich einen String mit Bindenstrichen übergeben wandelt mysql selbstädig in ein Datum um. In der Doku von mysql war es auch so zu finden. Bist du idr sicher das es mit # funktioniert?

snowman 16.01.2004 08:45

probier mal ' statt "

gruss,
snowman

darthj 16.01.2004 08:51

Hab ich schon hat auch nicht funktioniert.

snowman 16.01.2004 10:46

jetzt aber: datumsangabe muß so erfolgen: JJJJ-MM-TT

gruss,
snowman

Deftones 16.01.2004 11:13

vieleicht hilft dir das weiter


Date_and_time_functions

mfg

deftones

dreamer 16.01.2004 11:31

mysql_query("select * from Veranstaltung where Datum >= '2004-01-01' and Datum <= '2004-31-01'");

snowman 16.01.2004 15:52

Zitat:

Original geschrieben von dreamer
mysql_query("select * from Veranstaltung where Datum >= '2004-01-01' and Datum <= '2004-31-01'");
wer sagt, dass der php verwendet?
er hat nur eine einfache sql-abfrage gepostet. und das letzte datum ist 100% in der falschen reihenfolge.

gruss,
snowman

(V)uh 16.01.2004 16:49

Jetzt wär es interessant welches SQL du verwendest und wo (in welchem programm, umgebung) wenn das mit den # auch nicht funkt. Denn unter Access schreibt man ... SELECT * FROM tabDummy WHERE (((tabDummy.Zeit)>#1/14/2004# And (tabDummy.Zeit)<#1/16/2004#));

Verwendest du die sql anweisung als abfrage oder als parameter beim programmieren ?
Bei manchen systemen muss man die SQL anweisung mit ; abschliessen und bei manchen nicht. Hast du das schon probiert ?

_m3 16.01.2004 18:06

Meine Herren, im Subject steht
"MYSQL Datumsvergleich"

(V)uh 17.01.2004 15:51

Upsi, na ja das fettgedruckte überles ich meist *gg* da denk ich mir immer "zu dick aufgetragen" :D

(V)uh 17.01.2004 16:13

Wenn ich mir sein posting nochmal anschau dann fehlt meiner meinung nach der ";" am ende.
Oder versuch mal SELECT ... WHERE myDatum BETWEEN '2003-08-04' AND '2003-08-07' aber auch mit ";" am ende. Also nicht > oder < sondern BETWEEN.

Vielleicht kannst du für dein problem aber auch eine normale funktion benutzen ... http://www.mysql.com/doc/en/Date_and...functions.html

snowman 17.01.2004 18:58

der fehler ist das falsche datumsformat, bitte glaubs mir.

gruss,
snowman

Dr. Mabuse 19.01.2004 21:38

mein Senf

Code:

SELECT  *  FROM  `veranstaltung`  WHERE `datum`  >=  '2004-01-01' AND  `datum`  <  '2004-01-31'

pc.net 19.01.2004 21:45

bitte strings immer konvertieren ...

http://www.mysql.com/doc/en/Date_and...functions.html
Zitat:

STR_TO_DATE(str,format)
This is the reverse function of the DATE_FORMAT() function. It takes a string str, and a format string format, and returns a DATETIME value. The date, time, or datetime values contained in str should be given in the format indicated by format. For the specifiers that can be used in format, see the table in the DATE_FORMAT() function description. All other characters are just taken verbatim, thus not being interpreted. If str contains an illegal date, time, or datetime value, STR_TO_DATE() returns NULL.
Code:

mysql> SELECT STR_TO_DATE('03.10.2003 09.20', '%d.%m.%Y %H.%i')
        -> 2003-10-03 09:20:00
mysql> SELECT STR_TO_DATE('10rap', '%crap')
        -> 0000-10-00 00:00:00
mysql> SELECT STR_TO_DATE('2003-15-10 00:00:00', '%Y-%m-%d %H:%i:%s')
        -> NULL



snowman 20.01.2004 08:48

warum?

http://www.mysql.com/doc/en/DATETIME.html

Zitat:

You can specify DATETIME, DATE, and TIMESTAMP values using any of a common set of formats:

As a string in either 'YYYY-MM-DD HH:MM:SS' or 'YY-MM-DD HH:MM:SS' format. A ``relaxed'' syntax is allowed--any punctuation character may be used as the delimiter between date parts or time parts. For example, '98-12-31 11:30:45', '98.12.31 11+30+45', '98/12/31 11*30*45', and '98@12@31 11^30^45' are equivalent.

As a string in either 'YYYY-MM-DD' or 'YY-MM-DD' format. A ``relaxed'' syntax is allowed here, too. For example, '98-12-31', '98.12.31', '98/12/31', and '98@12@31' are equivalent.

As a string with no delimiters in either 'YYYYMMDDHHMMSS' or 'YYMMDDHHMMSS' format, provided that the string makes sense as a date. For example, '19970523091528' and '970523091528' are interpreted as '1997-05-23 09:15:28', but '971122129015' is illegal (it has a nonsensical minute part) and becomes '0000-00-00 00:00:00'.

As a string with no delimiters in either 'YYYYMMDD' or 'YYMMDD' format, provided that the string makes sense as a date. For example, '19970523' and '970523' are interpreted as '1997-05-23', but '971332' is illegal (it has nonsensical month and day parts) and becomes '0000-00-00'.

As a number in either YYYYMMDDHHMMSS or YYMMDDHHMMSS format, provided that the number makes sense as a date. For example, 19830905132800 and 830905132800 are interpreted as '1983-09-05 13:28:00'.

As a number in either YYYYMMDD or YYMMDD format, provided that the number makes sense as a date. For example, 19830905 and 830905 are interpreted as '1983-09-05'.

As the result of a function that returns a value that is acceptable in a DATETIME, DATE, or TIMESTAMP context, such as NOW() or CURRENT_DATE.

Illegal DATETIME, DATE, or TIMESTAMP values are converted to the ``zero'' value of the appropriate type ('0000-00-00 00:00:00', '0000-00-00', or 00000000000000).


gruss,
snowman

schera 20.01.2004 08:58

Datumsformat ...
 
Kann mich snowman nur anschliessen, da das Datumsformat falsch ist.

YYYY-MM-DD wäre richtig, also:

SELECT * from Veranstaltung where Datum >= '2004-01-01" AND Datum <= '2004-01-31'

gruss,

schera

darthj 20.01.2004 09:12

Snowman hat recht, am Datumsformat ist es gelegen. Gibt man ein ungültiges Datum an so meint MYSQL 0000-00-00 zum Vergleich nehmen zu müssen. => Datum ist nie kleiner und es kommt nix zurück.

Danke für eure Hilfe.

Eine andere Kurze Frage noch. Gibt es in PHP eine Möglichkeit die Elemente eines Arrays durch die Elemente eines anderen Arrays zu dividieren oder muss man das händisch machen?

LG
Jürgen

pc.net 20.01.2004 09:59

@snowman
ich konvertiere strings, die ein datum repräsentieren, immer ins date-format ...

warum? auf verschiedenen maschinen kann das date-format unterschiedlich sein ... ein skript/statement läuft auf der einen maschine aber auf der anderen nicht ... wenn man von haus aus eine konvertierung macht, spart man sich lange fehlersuche ...

gut, bei mysql mag immer das format YYYY-MM-DD angenommen werden ... bei anderen DB's ist das aber nicht zwingend so, da diese ev. das datumsformat der jeweiligen konfiguration verwenden (DD.MM.YYYY, DD-MON-YY, usw.) ...


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag