Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   convert_tz ohne Funktion (https://www.delphipraxis.net/185332-convert_tz-ohne-funktion.html)

Nersgatt 1. Jun 2015 10:05

Datenbank: mysql • Version: 5.6 • Zugriff über: SQL

convert_tz ohne Funktion
 
Moin,

ich habe ein komisches Phänomen mit convert_tz, welches ich mir überhaupt nicht erklären kann:
Code:
SET @x_utc = '2004-01-01 00:00:00';
SET @x_local = CONVERT_TZ(@x_utc,'+00:00','+02:00');

SET @a_utc = '1967-03-18 00:00:00';
SET @a_local = CONVERT_TZ(@a_utc,'+00:00','+02:00');

Select @a_utc, @a_local, @x_utc, @x_local;
ergibt bei mir:
@a_utc@a_local@x_utc@x_local
1967-03-18 00:00:001967-03-18 00:00:002004-01-01 00:00:002004-01-01 02:00:00

Warum sind a_utc und a_local gleich (wurden also nicht umgerechnet) und x_utc und x_local wurden (wie erwartet) umgerechnet? Bin ich denn doof??
Kann mir das jemand erklären? Was mache ich falsch?
Ich habe das auf 2 verschiedenen mySql-Servern ausprobiert und bin zum selben Ergebnis gekommen.

Danke!
Jens

Sir Rufo 1. Jun 2015 10:39

AW: convert_tz ohne Funktion
 
Das niedrigste Datum was dort funktioniert ist 1970-01-01 00:00:01

Liegt wohl daran, dass 1970-01-01 00:00:00 intern als 0 gehandhabt wird und alles was davor ist, eben einen negativen Wert hat (und damit kommt wohl
SQL-Code:
convert_tz
dann nicht klar - die prüfen ob der Wert > 0 ist)

baumina 1. Jun 2015 10:40

AW: convert_tz ohne Funktion
 
OT: Oh Gott, nu simmer schon zu alt für mySQL *heul

Nersgatt 1. Jun 2015 10:50

AW: convert_tz ohne Funktion
 
Wow, das nenn ich ein unerwartetes Verhalten. :shock:

Aber ist ja auch dokumentiert, nur hab ich nicht genau gelesen :stupid::
Zitat:

If the value falls out of the supported range of the TIMESTAMP type when converted from from_tz to UTC, no conversion occurs. The TIMESTAMP range is described in Section 11.1.2, “Date and Time Type Overview”.
Und in dem Abschnitt ist die Range dann auch so angegeben, wie Du sagst;
Zitat:

The range is '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
Die Beschränkung greift übrigens auch, wenn man convert_tz innerhalb einer eigenen Funktion mit Deklarierten Variablen vom Typ DateTime verwendet, obwohl die eine Range von
Zitat:

'1000-01-01 00:00:00' to '9999-12-31 23:59:59'
haben.

Damit ist convert_tz für mich nutzlos.

Danke für Deine Antwort!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz