Zeit seit der Registrierung anzeigen

n3oth3on3

Mitglied
Guten Tag,
ich habe ein kleines Problem. Ich würde gerne eine Abfrage machen und zwar soll sie das aktuelle Datum - das datum aus der Datenbank subtrahieren...

z.b. 2010-06-06 "-" 2009-10-04 und dann sollen halt die Tage Monate und so ausgegeben werden, wie mache ich das am besten?

Einer eine Idee :(?
 
wie mach ich das dann genau ?

SELECT DATEDIFF('CURDATE()','date');

date so heißt die zeile... oder wie mach ich das dann?
 
SQL:
SELECT DATEDIF(CURDATE(), meineTabelle.date) AS TageDifferenz FROM meineTabelle

PS: date ist ein sehr unglücklicher Name für eine SPalte, da es auch eine Funktion ist....
 
Zuletzt bearbeitet von einem Moderator:
ERROR 1305 (42000): FUNCTION hon.DATEDIF does not exist;

mysql> SELECT DATEDIF(CURDATE(), benutzer.date) AS TageDifferenz FROM benutzer;
 
Zuletzt bearbeitet:
@n3oth3on3

Es tut mir leid, dass ich dich damit verwirre das ich mein Script nicht getestet habe und darum den kleinen Schreibfeher im Namen der Funktion nicht herausgefunden habe. Es ist mir durchaus bewusst, dass es am Sonntag Abend zuviel verlangt währe, wenn du die bereits vorliegenden Informationen mit dem Beispiel von mir vergleichen würdest und dir anhand der Fehlermeldung gedanken machen würdest, wass wohl der Grund ist, dass die Funktion nicht erkannt wird, da sie ja anders heisst als die die ich dir in meiner ersten Antwort geliefert habe. Also, Sorry dafür.
Ich bin aber voller Hoffnung und Zuversicht, dass dir morgen am Montag - also an einem Tag wo das Gehirn wieder auf Arbeit eingestellt sein sollte - der Fehler meines Beispiels sofort ins Auge sticht und die Fehlermeldung dir dabei hift.
 
DATDIFF liefert leider nur Tage, nicht aber Monate.

Um die Differenz mit Monaten und Tagen zu berechnen wirds etwas komplizierter. Da ich darin eine gewisse Herausforderung sah, hatte ich grad Lust mal was auszuprobieren. In meinem Beispiel heisst die Tabelle date und das Feld ebenfalls date.

SQL:
SELECT
	fromDate,
	toDate,
	diffTotalDays,
	CONCAT(diffMonths, ' Monate und ', diffDays, ' Tage (insgesammt ', diffTotalDays, ' Tage)') AS diffAsString, 
	diffMonths,
	diffDays
FROM
	(
		SELECT 
			@fromDate			:=	d.date 				AS fromDate,
			@toDate				:=	CURDATE() 			AS toDate,
		
			# === temporäre Berechnungen ===
			# Diese können auch wegreduziert werden. Jedoch wird dann das SQL unlesbar
			
			# @flag1: Bestimmung ob der Tag des Monats im @fromDate grösser ist als in @toDate
			@flag1 				:= 	(DAY(@toDate) < DAY(@fromDate)),
			# @diffMonthsTemp: Direkt berechneter Unterschied der Monat unabhängig vom Tag
			@diffMonthsTemp		:= 	PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM @toDate), EXTRACT(YEAR_MONTH FROM @fromDate)),
			# @fromDateInMonthToS: Der Monatstag von @fromDate auf den Moant von @toDate angwendet
			@fromDateInMonthToS	:= 	CONCAT(YEAR(@toDate), '/', MONTH(@toDate) - IF(@flag1, 1, 0), '/', DAY(@fromDate)),
			# @fromDateInMonthTo: fromInMonthToS zu Datum Konvertiert
			@fromDateInMonthTo	:= 	STR_TO_DATE(@fromDateInMonthToS, '%Y/%m/%e'),
		
			# === Endgültige Berehnung ===
		
			# Einfache Differenz in Tagen
			DATEDIFF(@toDate, @fromDate) 					AS diffTotalDays ,
			# Differenz der Monate. Ist der Monatstag im @fromDate grösser als im @toDate muss die Zahl um 1 reduziert werden
			@diffMonthsTemp - IF(@flag1, 1, 0) 		AS diffMonths,
			# Diferenz der Tage in Kombination mit diffMonths
			DATEDIFF(@toDate, @fromDateInMonthTo) 					AS diffDays
		FROM date As d
	) data

Ausgabe
Code:
"fromDate";"toDate";"diffTotalDays";"diffAsString";"diffMonths";"diffDays"
"2009-03-20";"2010-06-07";"444";"14 Monate und 18 Tage (insgesammt 444 Tage)";"14";"18"
"2009-03-01";"2010-06-07";"463";"15 Monate und 6 Tage (insgesammt 463 Tage)";"15";"6"

Nachtrag: Bitte nicht ungetestet übernehmen. Die Berechnung muss mit weiteren Beispielen auf die Richtigkeit getestet werden!
 
Zuletzt bearbeitet von einem Moderator:
Zurück