Datetime/timestamp
Carl
- datenbank
hi
Ich hab da ein Problem mit dem eintrag eines Datums.
Wenn ich in der Datenbank den Typ timestamp verwende, wird das datum automatisch gespeichert, allerdings erfolgt dann die ausgabe als kompletter string.
Ich möchte die ausgabe aber in der art von 0000-00-00 00:00:00
Jetzt hab ichs mit Datetime versucht. Mein Problem ist jetzt, dass nun das Datum nicht mehr automatisch eingetragen wird.
Kann mir jemand helfen, entweder dass ich timestamp so wie gewünscht ausgeben kann (ich hab auf http://www.dclp-faq.de eine mögliche Lösung gefunden, aber nicht wirklich verstanden) oder das datetime automatisch gespeichert wird?
Gruss
Carl
Halihallo Carl
Ich hab da ein Problem mit dem eintrag eines Datums.
Wenn ich in der Datenbank den Typ timestamp verwende, wird das datum automatisch gespeichert, allerdings erfolgt dann die ausgabe als kompletter string.
Ich möchte die ausgabe aber in der art von 0000-00-00 00:00:00
Jetzt hab ichs mit Datetime versucht. Mein Problem ist jetzt, dass nun das Datum nicht mehr automatisch eingetragen wird.Kann mir jemand helfen, entweder dass ich timestamp so wie gewünscht ausgeben kann (ich hab auf http://www.dclp-faq.de eine mögliche Lösung gefunden, aber nicht wirklich verstanden) oder das datetime automatisch gespeichert wird?
Welche Datenbank? - mysql?
Viele Grüsse
Philipp
Halihallo Philipp Hasenfratz
Ich hab da ein Problem mit dem eintrag eines Datums.
Wenn ich in der Datenbank den Typ timestamp verwende, wird das datum automatisch gespeichert, allerdings erfolgt dann die ausgabe als kompletter string.
Ich möchte die ausgabe aber in der art von 0000-00-00 00:00:00
Jetzt hab ichs mit Datetime versucht. Mein Problem ist jetzt, dass nun das Datum nicht mehr automatisch eingetragen wird.Kann mir jemand helfen, entweder dass ich timestamp so wie gewünscht ausgeben kann (ich hab auf http://www.dclp-faq.de eine mögliche Lösung gefunden, aber nicht wirklich verstanden) oder das datetime automatisch gespeichert wird?
Welche Datenbank? - mysql?
Falls ja, dann wird dir bei http://www.mysql.com/doc/en/Date_and_time_functions.html#IDX1304 geholfen :-)
Viele Grüsse
Philipp
Hi Philipp
Ja es ist eine MYSQL Datenbank. Ich hab da allerdings ein Problem: entweder versuche ich es an der falschen stelle einzutragen oder irgendwas funktioniert da nicht so richtig.
ich hab versucht bei meiner datumszeile, die als timestamp(14) deklariert ist
SELECT FROM_UNIXTIME(875996580);
also standart einzufügen. Aber immer wenn ich ich auf speichern gehe, zeigt zwar der SQLadmin an, dass es aktualisiert wurde, aber das standartfeld ist immernoch leer....
Und die ausgabe erfolgt immernoch als string :(
Gruss
Carl
Halihallo Carl
Ja es ist eine MYSQL Datenbank. Ich hab da allerdings ein Problem: entweder versuche ich es an der falschen stelle einzutragen oder irgendwas funktioniert da nicht so richtig.
ich hab versucht bei meiner datumszeile, die als timestamp(14) deklariert ist
SELECT FROM_UNIXTIME(875996580);
damit ändert man nix, sondern berechnet. Um Default-Werte neu zu setzen, verwende ALTER TABLE ...
also standart einzufügen. Aber immer wenn ich ich auf speichern gehe, zeigt zwar der SQLadmin an, dass es aktualisiert wurde, aber das standartfeld ist immernoch leer....
Bei einem SELECT verwundert mich das wenig. SELECT bedeutet: selektieren, nicht ändern. Oder hast du was verschwiegen? :-)
Und die ausgabe erfolgt immernoch als string :(
Was verwendest du als Programmiersprache? - Bei den (meisten) 4GL hat dies keine Auswirkung.
Viele Grüsse
Philipp
Hi
Ok ich versuch mich mal zu erklären ;)
Also: ich hab ein php-newsscript geschrieben. Ich möchte, wenn ein Eintrag gemacht wird, dass der Zeitpunkt automatisch festgehalten wird, also am beste über timestamp.
die ausgabe erfolgt dann über ein weiteres script, wobei ich mit echo die variablen an die richtige stelle meiner seite einfüge.
hier mal das ausgabescript:
<?
require("db_connect.php");
$query = "SELECT * FROM news ORDER BY id DESC LIMIT 5";
$result = mysql_query($query);
if (mysql_errno())
{
die("<br>" . mysql_errno(). ": ".mysql_error()."<br>");
}
while ($rows = mysql_fetch_row($result))
{
if (mysql_errno())
{
die("<br>" . mysql_errno().": ".mysql_error()."<br>");
}
{
echo
?>
<body BGCOLOR="#528786" TEXT="#ffffff">
<p align="center">
<table align=center width=500>
<tr valign=top>
<td align=center width=120>
<font size="2">Datum</font>
</td>
<td align=center >
<font size="2"><? echo "$rows[1]" ?></font>
</table>
</td>
</tr>
</table>
</p>
<?
}
}
?>
(ich hab einen teil des html-textes gelöscht, in dem die ausgabe der restlichen daten stattfand.
Halihallo Carl
Ok ich versuch mich mal zu erklären ;)
darauf hab ich gewartet :-)
Also: ich hab ein php-newsscript geschrieben. Ich möchte, wenn ein Eintrag gemacht wird, dass der Zeitpunkt automatisch festgehalten wird, also am beste über timestamp.
Hm. Ich bin mir nicht sicher, ob sich das so automatisieren lässt?! - Du musst vielleicht auf manuelles Vorgehen (also im Script selber) umsteigen:
SELECT UNIX_TIME(CONCAT(CURDATE(),' ',CURTIME()));
und den Wert dann im INSERT Statement einfügen, oder ein php-internes aquivalent für timestamp-generierung verwenden.
die ausgabe erfolgt dann über ein weiteres script, wobei ich mit echo die variablen an die richtige stelle meiner seite einfüge.
hier mal das ausgabescript:
[...]
das ist genau das, was für deine Frage nicht relevant ist. Vielmehr würde die Speicherung von Interesse sein.
Viele Grüsse
Philipp
Halihallo Philipp Hasenfratz
SELECT UNIX_TIME(CONCAT(CURDATE(),' ',CURTIME()));
Würg. UNIX_TIMESTAMP natürlich, sorry.
Nachtrag:
http://www.mysql.com/doc/en/CREATE_TABLE.html says:
<quote>
A DEFAULT value has to be a constant, it can not be a function or an expression. If no DEFAULT value is specified for a column, MySQL automatically assigns one. If the column may take NULL as a value, the default value is NULL. If the column is declared as NOT NULL, the default value depends on the column type:
For numeric types other than those declared with the AUTO_INCREMENT attribute, the default is 0. For an AUTO_INCREMENT column, the default value is the next value in the sequence.
For date and time types other than TIMESTAMP, the default is the appropriate zero value for the type. For the first TIMESTAMP column in a table, the default value is the current date and time. See section 6.2.2 Date and Time Types.
For string types other than ENUM, the default value is the empty string. For ENUM, the default is the first enumeration value (if you haven't explicitly specified another default value with the DEFAULT directive).
Default values must be constants. This means, for example, that you cannot set the default for a date column to be the value of a function such as NOW() or CURRENT_DATE.
</quote>
zu Deutsch: Die erste Timestamp - Spalte hat als Defaultwert die aktuelle Serverzeit. Wobei ich das zur Zeit nicht verifizieren kann; zudem halte ich das für merkwürdig, da man ja eine Konstante als Default angibt, warum sollte also mysql etwas anderes verwenden? - Wie dem auch sei: Vielleicht hilfts dir ja.
Viele Grüsse
Philipp
Hallo!
zu Deutsch: Die erste Timestamp - Spalte hat als Defaultwert die aktuelle Serverzeit. Wobei ich das zur Zeit nicht verifizieren kann; zudem halte ich das für merkwürdig, da man ja eine Konstante als Default angibt, warum sollte also mysql etwas anderes verwenden? - Wie dem auch sei: Vielleicht hilfts dir ja.
Die erste Timstamp Spalte enthält den aktuellen timestamp einer Datensatzmanipulation wie INSERT oder UPDATE, vorausgesetz Du überschreibst den Wert nicht manuell. Jede weitere timestamp-Spalte muß manuell gesetzt/manipuliert werden.
Ich habe z.B. eine Tabelle(Name: "table") mit den Spalten
name | zeit
Wenn die Spalte "zeit" das Format timestamp(14) hat, dann kannst Du mit
INSERT INTO table SET name='Philipp'
einen Eintrag machen, und es wird automatisch der aktuelle Timestamp in die Spalte "zeit" eingefügt.
Wenn Du
INSERT INTO table SET name='Philipp', zeit = 'was weiß ich für ein Zeitpunkt'
einfügst, dann wird halt "was weiß ich für ein Zeitpunkt" in die zeit-Spalte eingefügt, solange das Format gültig ist.
Wenn Du beim SELECT aber ein anderes Format ausgeben willst, kannst Du das Datum formatieren wie Du möchtest, so mit http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#IDX1264
SELECT name, DATE_FORMAT(zeit,'%D%y%a%d%m%b%j') AS zeit....;
Dann hast Du später in "zeit" Deinen so wie Du es möchtest formatierten Timestamp. Ich mache das dann aber noch etwas anders, ich verwende meist
SELECT name, UNIX_TIMESTAMP(zeit) AS zeit....;
dann gebe ich in PHP dann z.B. echo date("d.m.Y",$row["zeit"]) aus.
Die Möglichkeiten sind unendlich, man kann auch direkt einen Unix-Timstamp eintragen, nur sobald man von dem mysql-Timestamp Format der Spalte Abstand nimmt, dann muß man sich selbst beim INSERT und UPDATE ums Eintragen des Datums kümmern, halt mit
INSERT INTO table SET name='Philipp', zeit = now()
das ginge so z.B. mit einer DATETIME Spalte. Oder man nimmt eine einfache INT oder CHAR Spalte und trägt direkt den Unix-Timestamp ein, so wie
INSERT INTO table SET name='Philipp', zeit = ".time().";
^^^^^^
Das ist eine PHP-Funktion in der Query
letzeres ist meine Lieblingsvariante mit INT(10), vermutlich(hoffentlich) das schnellste beim lesen.
Wie gesagt, die Möglichkeiten sind schier unendlich! Einfach rumprobieren was am besten zum eigenen Programmierstil passt!
Viele Grüße
Andreas
PS: Lang nichts mehr von Dir gehört ;-) Hab letze Zeit viel mit MySQL rum-experimentiert und Dank Michael ne ganze Menge gelernt, hab probiert eien eigene mySQL-basierte Suche für das SELFArchiv zu bauen, und das werde ich auch beenden ;-) die letzte Woche war nur etwas stressig bei mir.
Halihallo Andreas
zu Deutsch: Die erste Timestamp - Spalte hat als Defaultwert die aktuelle Serverzeit. Wobei ich das zur Zeit nicht verifizieren kann; zudem halte ich das für merkwürdig, da man ja eine Konstante als Default angibt, warum sollte also mysql etwas anderes verwenden? - Wie dem auch sei: Vielleicht hilfts dir ja.
Die erste Timstamp Spalte enthält den aktuellen timestamp einer Datensatzmanipulation wie INSERT oder UPDATE, vorausgesetz Du überschreibst den Wert nicht manuell. Jede weitere timestamp-Spalte muß manuell gesetzt/manipuliert werden.Ich habe z.B. eine Tabelle(Name: "table") mit den Spalten
name | zeit
Wenn die Spalte "zeit" das Format timestamp(14) hat, dann kannst Du mit
INSERT INTO table SET name='Philipp'
einen Eintrag machen, und es wird automatisch der aktuelle Timestamp in die Spalte "zeit" eingefügt.
Wenn Du
INSERT INTO table SET name='Philipp', zeit = 'was weiß ich für ein Zeitpunkt'
einfügst, dann wird halt "was weiß ich für ein Zeitpunkt" in die zeit-Spalte eingefügt, solange das Format gültig ist.
Hm. Das scheint mir ja noch innerhalb logischer Parameter abzulaufen ;-)
Aber was passiert nun, wenn ich den Default der Spalte z. B. auf '98435798' lege? - Wir dann immer noch die aktuelle Timestamp eingefügt, also da wüsste ich dann nicht, ob es ein Bug oder ein Feature wäre. Geht doch nicht, dass sich mysql einfach über die Defaultwerte hinwegsetzt...
[...]
Wie gesagt, die Möglichkeiten sind schier unendlich! Einfach rumprobieren was am besten zum eigenen Programmierstil passt!
Was zum eigenen Programmierstil passt? :
Admazing::Statistic extends Admazing::DataNode extends Admazing::DateTime extends Admazing::Timestamp extends Admazing::Number -> smile
PS: Lang nichts mehr von Dir gehört ;-)
Das geht uns beiden so :-)
Weiss gar nicht, was ich die letzte Zeit so getrieben habe, aber es war auch viel :-)
Hab letze Zeit viel mit MySQL rum-experimentiert und Dank Michael ne ganze Menge gelernt, hab probiert eien eigene mySQL-basierte Suche für das SELFArchiv zu bauen, und das werde ich auch beenden ;-) die letzte Woche war nur etwas stressig bei mir.
Ich hab mich mal eben mit Eisbär getroffen und auch ein kleines Projekt besprochen. Ein Modul zur Ausgabe von XHTML Source. Nun, das Projekt ist auch schon etwas grösser geworden als ich mir gedacht hatte, aber wir kommen voran :-)
Na, bei mir war die letzte Woche eher XML-lastig :-)
Nebenbei hätt ich noch einen Kunden ziemlich erzürnt, hätte er den Programmierfehler (wie ich das HASSE! - Bin aber leider auch nur ein Mensch...) bemerkt; aber ich hab ihn vorher erkannt und gleich mal gelöst... Nochmals mit blauem Auge davongekommen ;-)
Na, ich schreib dir am besten noch ne E-Mail...
Viele Grüsse
Philipp