Ansicht:   

#253438

hannibal-007

02.01.2011, 19:54:24
(editiert von hannibal-007, 02.01.2011, 19:59:07)

MySQL: date_format Problem (ed) (pc.coding)

Hi

Ich hab ein etwas seltsames Problem:

Ich hab ne SQL Tabelle (MyIsam in MySQL 5.1.x:

CREATE TABLE IF NOT EXISTS `system__appointment_entries` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `creation_date` datetime NOT NULL,
  `author` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `description` longtext COLLATE utf8_unicode_ci NOT NULL,
  `comment` longtext COLLATE utf8_unicode_ci NOT NULL,
  `blog` int(11) NOT NULL,
  `email` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `ip` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
  `location` longtext COLLATE utf8_unicode_ci NOT NULL,
  `color` int(11) NOT NULL,
  `day` int(11) NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=72 ;


Darin folgender Eintrag:

(70, \'asddas\', \'2011-01-05 18:25:00\', \'\', \'\', \'\', 1, \'\', \'\', \'asdads\', 9, 0)


Entscheidend ist das Datum. in der ersten Kalenderwoche.

Dann folgende Abfrage (der Stern ist nur zum Testen):

SELECT  * 
FROM appointment,
	system__appointment_entries 
WHERE DATE_FORMAT(system__appointment_entries.creation_date,\'%v\') = \'1\' 
ORDER BY system__appointment_entries.creation_date DESC 


Ergebnis: kein Tupel wird gefunden.
Wo liegt das Problem?
Bei manchen Daten scheint zu funktionieren, bei anderen nicht. Das ist eine ziemlich einfache Sache - wenn es funktionieren würde.
Ich sehs nicht. Habt ihr ne Idee?

Gruß
Sigurd

#253443

Bard

02.01.2011, 20:39:20

@ hannibal-007

MySQL: date_format Problem

> Ich hab ein etwas seltsames Problem:
>
>

(70, \'asddas\', \'2011-01-05 18:25:00\', \'\', \'\', \'\', 1, \'\', \'\',
> \'asdads\', 9, 0)


> Entscheidend ist das Datum. in der ersten Kalenderwoche.
>
> Dann folgende Abfrage (der Stern ist nur zum Testen):
>

SELECT  * 
> FROM appointment,
> system__appointment_entries 
> WHERE DATE_FORMAT(system__appointment_entries.creation_date,\'%v\') = \'1\' 
> ORDER BY system__appointment_entries.creation_date DESC 


> Ergebnis: kein Tupel wird gefunden.
> Wo liegt das Problem?
> Bei manchen Daten scheint zu funktionieren, bei anderen nicht. Das ist
> eine ziemlich einfache Sache - wenn es funktionieren würde.
> Ich sehs nicht. Habt ihr ne Idee?
>

Das hat was mit der Wochenberechnung zu tun.

Wiki hat da recht umfangreiche Infos: http://de.wikipedia.org/wiki/Woche#Kalenderwoche

In der MySQL-Dokumentation: http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html heißt es:

%V Woche (01 ... 53), wobei Sonntag der erste Tag der Woche ist; wird mit %X verwendet
%v Woche (01 ... 53), wobei Montag der erste Tag der Woche ist; wird mit %x verwendet


Unter Umständen liefert MySQL den 1.1. als erste Woche zurück, alles ab dem zweiten (evtl. dritten) Januar zählt schon als zweite Woche.

Schau dir statt date_format die WEEK-Funktion an.

Grüße
Bard

#253446

hannibal-007

02.01.2011, 20:53:21

@ Bard

MySQL: date_format Problem

Du spielst auf die Defintion von der KW 1 an, entweder ab 1.1 oder ab dem ersten Montag in neuen Jahr.

Week() bringt mich leider nicht weiter, weil ich kein Datum hab.
Ich weiß, ich hab 52 Wochen im Jahr und will ne Liste ausgeben mit der Syntax:

Kalenderwochennummer: Anzahl der Termine

D.h. die Eingabe ist KW 1 und Jahr = 2011.
So kann ich week nicht benutzen.
http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html

#253481

Bard

02.01.2011, 23:22:04

@ hannibal-007

MySQL: date_format Problem

> Week() bringt mich leider nicht weiter, weil ich kein Datum hab.

???

Ich habe dein Ursprungsposting so verstanden, dass du ein DateTime-Feld hast, in das du das fragliche Datum einträgst...

Grüße
Bard

#253483

hannibal-007

02.01.2011, 23:27:29

@ Bard

MySQL: date_format Problem

Eine For Schleife wo ich die Kalenderwochen hochzähle.
Guck mal genau hin: Mehr gebe ich nicht an ;)

#253492

Bard

03.01.2011, 01:01:16

@ hannibal-007

MySQL: date_format Problem

> Eine For Schleife wo ich die Kalenderwochen hochzähle.
> Guck mal genau hin: Mehr gebe ich nicht an ;)

Den Hinweis verstehe ich zwar nicht, habe es jetzt aber mal mit einer auf die Schnelle aufzutreibenden MySQL-5.0-Installation durchgespielt:

SELECT DATE_FORMAT( creation_date, \'%v\' ) FROM system__appointment_entries

Liefert eine Zeile eine Spalte
\'01\'
zurück.

Versuch\'s mal mit = \'01\'

Ansonsten:
SELECT * FROM `system__appointment_entries` WHERE week(creation_date)=1

Nacht und Grüße
Bard

Ansicht:   
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz