Thread View: de.comp.datenbanken.mysql
8 messages
8 total messages
Started by Marco Moock
Thu, 17 Apr 2025 11:44
mariadb TIMESTAMP beim INSERT konvertieren
Author: Marco Moock
Date: Thu, 17 Apr 2025 11:44
Date: Thu, 17 Apr 2025 11:44
19 lines
588 bytes
588 bytes
Hallo zusammen! Ich habe eine Spalte vom Typ Timestamp. Die will in einem bestimmten Format gefüttert werden ("2025-04-16 12:58:01"). Die Daten haben ein leicht anderes Format ('2025-04-16T12:58:01,076Z'). Kann man die im INSERT-Befehl konvertieren lassen (ggf. select da reinpacken) oder muss ich das definitiv vorher machen? select TIMESTAMP( '2025-04-16T12:58:01,076Z'); macht das eigentlich schon, stellt sich die Frage, wie ich das in den Insert-Befehl reinpacken kann. -- Gruß Marco Spam und Werbung bitte an 1744882916ichwillgesperrtwerden@stinkedores.dorfdsl.de
Re: mariadb TIMESTAMP beim INSERT konvertieren
Author: "Peter J. Holzer
Date: Thu, 17 Apr 2025 12:21
Date: Thu, 17 Apr 2025 12:21
22 lines
799 bytes
799 bytes
On 2025-04-17 09:44, Marco Moock <mm+solani@dorfdsl.de> wrote: > Ich habe eine Spalte vom Typ Timestamp. Die will in einem bestimmten > Format gefüttert werden ("2025-04-16 12:58:01"). > > Die Daten haben ein leicht anderes Format ('2025-04-16T12:58:01,076Z'). > Kann man die im INSERT-Befehl konvertieren lassen (ggf. select da > reinpacken) oder muss ich das definitiv vorher machen? > > select TIMESTAMP( '2025-04-16T12:58:01,076Z'); macht das eigentlich > schon, stellt sich die Frage, wie ich das in den Insert-Befehl > reinpacken kann. Die Werte innerhalb von Values können beliebige Expressions sein. Du kannst also insert into t(c1, c2) values(3 + 4 * 5, 'ein' || 'string'); schreiben und natürlich auch insert into t(c3) values(TIMESTAMP('2025-04-16T12:58:01,076Z')); hjp
Re: mariadb TIMESTAMP beim INSERT konvertieren
Author: Marco Moock
Date: Thu, 17 Apr 2025 12:32
Date: Thu, 17 Apr 2025 12:32
13 lines
325 bytes
325 bytes
Am 17.04.2025 12:21 Uhr schrieb Peter J. Holzer: > insert into t(c3) values(TIMESTAMP('2025-04-16T12:58:01,076Z')); Danke, das habe ich gesucht und erst mit einem SELECT vor dem TIMESTAMP versucht, was aber nicht geht. -- Gruß Marco Spam und Werbung bitte an 1744885303ichwillgesperrtwerden@nirvana.admins.ws
Re: mariadb TIMESTAMP beim INSERT konvertieren
Author: "Peter J. Holzer
Date: Thu, 17 Apr 2025 13:26
Date: Thu, 17 Apr 2025 13:26
26 lines
973 bytes
973 bytes
On 2025-04-17 10:32, Marco Moock <mm+solani@dorfdsl.de> wrote: > Am 17.04.2025 12:21 Uhr schrieb Peter J. Holzer: >> insert into t(c3) values(TIMESTAMP('2025-04-16T12:58:01,076Z')); > > Danke, das habe ich gesucht und erst mit einem SELECT vor dem TIMESTAMP > versucht, was aber nicht geht. > insert into t(c3) select TIMESTAMP('2025-04-16T12:58:01,076Z'); sollte auch gehen, ist aber eher sinnlos. insert ... select verwendet man, wenn man das Ergebnis eines select in eine Tabelle einfügen will. Seltsamerweise funktioniert bei mir (Server version: 10.11.11-MariaDB-0+deb12u1 Debian 12) ein blankes select TIMESTAMP( '2025-04-16T12:58:01,076Z'); aber jede andere Verwendung von TIMESTAMP( '2025-04-16T12:58:01,076Z') führt zu einem ERROR 1292 (22007): Truncated incorrect datetime value: '2025-04-16T12:58:01,076Z' Da ich MySQL/MariaDB eigentlich nicht verwende, versuche ich jetzt nicht, herauszufinden, was der Grund für diese Inkonsistenz ist. hjp
Re: mariadb TIMESTAMP beim INSERT konvertieren
Author: Marco Moock
Date: Thu, 17 Apr 2025 14:26
Date: Thu, 17 Apr 2025 14:26
29 lines
917 bytes
917 bytes
Am 17.04.2025 12:21 Uhr schrieb Peter J. Holzer: > insert into t(c3) values(TIMESTAMP('2025-04-16T12:58:01,076Z')); Wobei dieser Fall nicht gefressen wird. MariaDB [berger_solar]> insert into messwerte (kwh_absolut, datum) values ("367.999235",TIMESTAMP('2025-04-16T12:58:01,076Z')); ERROR 1292 (22007): Truncated incorrect datetime value: '2025-04-16T12:58:01,076Z' MariaDB [berger_solar]> SELECT TIMESTAMP("2025-04-16T12:58:01,076Z"); +---------------------------------------+ | TIMESTAMP("2025-04-16T12:58:01,076Z") | +---------------------------------------+ | 2025-04-16 12:58:01 | +---------------------------------------+ 1 row in set, 1 warning (0,002 sec) MariaDB [berger_solar]> Irgendwie scheint die Verarbeitung von TIMESTAMP in diesem Kontext nicht zu funktionieren. -- Gruß Marco Spam und Werbung bitte an 1744885303ichwillgesperrtwerden@nirvana.admins.ws
Re: mariadb TIMESTAMP beim INSERT konvertieren
Author: bw1@mails.at
Date: Thu, 17 Apr 2025 19:53
Date: Thu, 17 Apr 2025 19:53
46 lines
1614 bytes
1614 bytes
Marco Moock <mm+solani@dorfdsl.de> wrote: > Am 17.04.2025 12:21 Uhr schrieb Peter J. Holzer: > > MariaDB [berger_solar]> insert into messwerte (kwh_absolut, datum) values ("367.999235",TIMESTAMP('2025-04-16T12:58:01,076Z')); > ERROR 1292 (22007): Truncated incorrect datetime value: '2025-04-16T12:58:01,076Z' > die datenbank meint sie kennt sich mit dem string nicht aus und sie hat in verkürzt. MariaDB [test]> select TIMESTAMP('2025-04-16T12:58:01,076Z'); +---------------------------------------+ | TIMESTAMP('2025-04-16T12:58:01,076Z') | +---------------------------------------+ | 2025-04-16 12:58:01 | +---------------------------------------+ 1 row in set, 1 warning (0,000 sec) und da fehlen auch die komma stellen der sekunde und https://mariadb.com/kb/en/timestamp-function/ diese funktion ist gar nicht zum wandeln eines strings in ein datum vorgesehen. '2025-04-16T12:58:01,076Z' ^ was soll eigentlich der beistrich da bedeuten? dann könnte man ein wenig basteln https://mariadb.com/kb/en/str_to_date/ MariaDB [test]> select str_to_date('2025-04-16T12:58:01,076Z','%Y-%m-%dT%H:%i:%s,%fZ'); +-----------------------------------------------------------------+ | str_to_date('2025-04-16T12:58:01,076Z','%Y-%m-%dT%H:%i:%s,%fZ') | +-----------------------------------------------------------------+ | 2025-04-16 12:58:01.076000 | +-----------------------------------------------------------------+ 1 row in set (0,000 sec) das ist vermutlich noch nicht alles zum beispiel: %H Hour with 2 digits between 00-23. mfg bw1
Re: mariadb TIMESTAMP beim INSERT konvertieren
Author: "Peter J. Holzer
Date: Thu, 17 Apr 2025 22:49
Date: Thu, 17 Apr 2025 22:49
59 lines
2163 bytes
2163 bytes
On 2025-04-17 19:53, bw1@mails.at <bw1@mails.at> wrote: > Marco Moock <mm+solani@dorfdsl.de> wrote: >> MariaDB [berger_solar]> insert into messwerte (kwh_absolut, datum) values ("367.999235",TIMESTAMP('2025-04-16T12:58:01,076Z')); >> ERROR 1292 (22007): Truncated incorrect datetime value: '2025-04-16T12:58:01,076Z' >> > die datenbank meint sie kennt sich mit dem string nicht aus > und sie hat in verkürzt. > > MariaDB [test]> select TIMESTAMP('2025-04-16T12:58:01,076Z'); > +---------------------------------------+ >| TIMESTAMP('2025-04-16T12:58:01,076Z') | > +---------------------------------------+ >| 2025-04-16 12:58:01 | > +---------------------------------------+ > 1 row in set, 1 warning (0,000 sec) > > und da fehlen auch die komma stellen der sekunde Ja, aber man bekommt keinen Fehler, nur eine Warning (die man nebenbei noch mit »show warnings;« explizit abfragen muss). Das Geheimnis liegt in der Definition des »strict mode«. | Strict mode controls how MySQL handles invalid or missing values in | data-change statements such as INSERT or UPDATE. [...] | For statements such as SELECT that do not change data, invalid values | generate a warning in strict mode, not an error. Der Versuch, '2025-04-16T12:58:01,076Z' in ein DATETIME umzuwandeln hat also unterschiedliche Folgen, je nachdem, ob man das in einem INSERT oder SELECT probiert. Man kann das mit »insert ignore« übersteuern: | MariaDB [simba]> insert ignore into t values('2025-04-16T12:58:01,076Z'); | Query OK, 1 row affected, 1 warning (0.005 sec) Ob das eine gute Idee ist, lasse ich dahingestellt. > und https://mariadb.com/kb/en/timestamp-function/ diese funktion ist > gar nicht zum wandeln eines strings in ein datum vorgesehen. Ja, die Funktion ist sinnlos. Mit entsprechendem Kontext reicht das Literal. > '2025-04-16T12:58:01,076Z' > ^ > was soll eigentlich der beistrich da bedeuten? Fractional seconds. Das sieht man in Logfiles recht häufig. ISO 8601 erlaubt sowohl Punkt als auch Komma, wobei ältere Versionen des Standards das Komma bevorzugt haben[1]. hjp [1] https://en.wikipedia.org/wiki/ISO_8601#Times
Re: mariadb TIMESTAMP beim INSERT konvertieren
Author: Marco Moock
Date: Fri, 18 Apr 2025 11:18
Date: Fri, 18 Apr 2025 11:18
55 lines
1921 bytes
1921 bytes
Am 17.04.2025 19:53 Uhr schrieb bw1@mails.at: > Marco Moock <mm+solani@dorfdsl.de> wrote: > > Am 17.04.2025 12:21 Uhr schrieb Peter J. Holzer: > > > > MariaDB [berger_solar]> insert into messwerte (kwh_absolut, datum) > > values ("367.999235",TIMESTAMP('2025-04-16T12:58:01,076Z')); ERROR > > 1292 (22007): Truncated incorrect datetime value: > > '2025-04-16T12:58:01,076Z' > die datenbank meint sie kennt sich mit dem string nicht aus > und sie hat in verkürzt. > > MariaDB [test]> select TIMESTAMP('2025-04-16T12:58:01,076Z'); > +---------------------------------------+ > | TIMESTAMP('2025-04-16T12:58:01,076Z') | > +---------------------------------------+ > | 2025-04-16 12:58:01 | > +---------------------------------------+ > 1 row in set, 1 warning (0,000 sec) > > und da fehlen auch die komma stellen der sekunde > > und > https://mariadb.com/kb/en/timestamp-function/ > diese funktion ist gar nicht zum wandeln eines strings in ein datum > vorgesehen. > > > '2025-04-16T12:58:01,076Z' > ^ > was soll eigentlich der beistrich da bedeuten? Ist durch eigene Unvorsichtigkeit bei der Nutzung von tr entstanden, ich habe das daher mit awk gemacht und den Punkt gelassen. > dann könnte man ein wenig basteln > https://mariadb.com/kb/en/str_to_date/ > MariaDB [test]> select > str_to_date('2025-04-16T12:58:01,076Z','%Y-%m-%dT%H:%i:%s,%fZ'); > +-----------------------------------------------------------------+ | > str_to_date('2025-04-16T12:58:01,076Z','%Y-%m-%dT%H:%i:%s,%fZ') | > +-----------------------------------------------------------------+ | > 2025-04-16 12:58:01.076000 | > +-----------------------------------------------------------------+ 1 > row in set (0,000 sec) Danke, hat funktioniert. -- Gruß Marco Spam und Werbung bitte an 1744912389ichwillgesperrtwerden@nirvana.admins.ws
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads