🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#80017
Author: Marco Moock
Date: Thu, 17 Apr 2025 11:44
19 lines
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
#80018
Author: "Peter J. Holzer
Date: Thu, 17 Apr 2025 12:21
22 lines
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
#80019
Author: Marco Moock
Date: Thu, 17 Apr 2025 12:32
13 lines
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
#80020
Author: "Peter J. Holzer
Date: Thu, 17 Apr 2025 13:26
26 lines
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
#80021
Author: Marco Moock
Date: Thu, 17 Apr 2025 14:26
29 lines
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
#80022
Author: bw1@mails.at
Date: Thu, 17 Apr 2025 19:53
46 lines
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
#80023
Author: "Peter J. Holzer
Date: Thu, 17 Apr 2025 22:49
59 lines
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
#80024
Author: Marco Moock
Date: Fri, 18 Apr 2025 11:18
55 lines
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