ralfkausk
Goto Top

MS-SQL Abfragen: Datum und Uhrzeit haben in der Ausgabe falsche Werte

Ich habe wenig bis keine Erfahrung im Umgang mit MS-SQL Abfragen und suche mir die meisten Sachen im Internet zusammen.
Aktuell bin ich auf ein Problem mit Datum und Uhrzeit gestoßen bei dem ich etwas Hilfe gebrauchen könnte.

Folgendes Problem
In einem Feld "Anlagedatum" steht ein Datum, z.B. "01.01.1971 00:00:00"
(Mir wurde jedenfalls glaubhaft versichert, dass das Datum 01.01.1971 bei der Anlage verwendet wurde)
Wenn ich dieses Feld nun abfrage bekomme ich als Ergebnis "1970-12-31 23:00:00.000"
Scheinbar wird bei der Ausgabe/Abfrage eine Stunde abgezogen, was am Ende das Ergebnis verfälscht

Ich bin schon auf die Idee gekommen die Ausgabe/Abfrage zu manipulieren und einfach eine Stunde drauf zu rechnen, weil ich vermute das es mit den Zeitzonen zu tun haben könnte. Vermutlich ist das aber nicht der richtige Weg, zumal es ha halbjährlich eine Zeit Umstellung gibt.

Meine Zeitzone habe ich folgendermaßen ermittelt
Abfrage: SELECT CURRENT_TIMEZONE()
Ausgabe: (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna

Meine Frage
Ist es möglich die Zeitzone in der Abfrage Global zu setzen, sodass alles Ergebnisse automatisch angepasst werden, ohne das ich jedes einzelne Ergebnis bearbeiten muss?

Meine Wunschvorstellung
SET TimeZone 'W. Europe Standard Time'  
SELECT Name, Anlagedatum
FROM Tabelle1

Ich hoffe ich habe verständlich ausgedrückt wo der Schuh drückt, und hoffe inständig das mir hier jemand helfen kann.
Da ich nicht weiß was ich noch an hilfreichen Informationen liefern kann/soll, bitte danach Fragen. Sofern möglich werde asap alles geforderte nachliefern

Vielen Dank im Voraus
Ralf

Content-ID: 8076960545

Url: https://administrator.de/contentid/8076960545

Ausgedruckt am: 26.11.2024 um 05:11 Uhr

StefanKittel
StefanKittel 08.08.2023 um 12:06:28 Uhr
Goto Top
Hallo,

Zeitzonen sind hier wichtig.
Sowohl beim Abfragen als auch Eintragen.

Vieleicht wurde der Eintrag damals mit einer falschen Zeitzone gemacht?

Stefan
7907292512
7907292512 08.08.2023 aktualisiert um 12:26:30 Uhr
Goto Top
Ist es möglich die Zeitzone in der Abfrage Global zu setzen, sodass alles Ergebnisse automatisch angepasst werden, ohne das ich jedes einzelne Ergebnis bearbeiten muss?
Guckst du
Understanding Time Zones in SQL Server
Dann du verstehen face-smile.

p.s.
(Mir wurde jedenfalls glaubhaft versichert, dass das Datum 01.01.1971 bei der Anlage verwendet wurde)
Wenn ich dieses Feld nun abfrage bekomme ich als Ergebnis "1969-12-31 23:00:00.000"
1 Jahr und 1 Stunde unterschied soll die Zeitzone sein ?? Zwischen 1.1.1970 und 1.1.1971 liegt schon noch ein Jahr face-big-smile

Gruß siddius
em-pie
Lösung em-pie 08.08.2023 um 12:29:04 Uhr
Goto Top
Moin,

witzig ist ja, dass dir das Ergebnis exakt 1 Jahr und 1 Tag abzieht:
(Mir wurde jedenfalls glaubhaft versichert, dass das Datum 01.01.1971 bei der Anlage verwendet wurde)
Wenn ich dieses Feld nun abfrage bekomme ich als Ergebnis "1969-12-31 23:00:00.000"
Es hätte ja wenn denn dann der 31.12.1970 23:00:00 ausgegeben werden müssen.

Kannst du das mal testen, was herauskommt, wenn man über das Eingabeformular etwas Neues einträgt?


Ansonsten kannst du die Lokale Zeit (inkl. Daylight-Saving-Time) so ausgeben lassen:
SELECT [neudatetime] = CONVERT(datetime, AnlageDatum AT TIME ZONE 'UTC' AT TIME ZONE 'Central European Standard Time')  
Pjordorf
Pjordorf 08.08.2023 um 12:30:33 Uhr
Goto Top
Hallo,

Zitat von @ralfkausk:
Aktuell bin ich auf ein Problem mit Datum und Uhrzeit gestoßen bei dem ich etwas Hilfe gebrauchen könnte.
Dir ist schon Klar das nicht jedes Land ein Datum in tt.mm.jj oder tt.mm.jjjj wie wir in DE nutzen?

In einem Feld "Anlagedatum" steht ein Datum, z.B. "01.01.1971 00:00:00"
US Amerikanisches Datum? mm.tt,jjjj

(Mir wurde jedenfalls glaubhaft versichert, dass das Datum 01.01.1971 bei der Anlage verwendet wurde)
Kann schon so sein.

Wenn ich dieses Feld nun abfrage bekomme ich als Ergebnis "1969-12-31 23:00:00.000"
Wenn dies so eingetragen ist, ist es OK.

Scheinbar wird bei der Ausgabe/Abfrage eine Stunde abgezogen, was am Ende das Ergebnis verfälscht
Du hinkst 1 Jahr hintendran. 1971 -1 Stunde ist nicht 1969...

Ich bin schon auf die Idee gekommen die Ausgabe/Abfrage zu manipulieren
Dann Manipuliere doch. Du willst ja nur die Ausgabe Manipulieren, nicht den gespeicherten Wert in der Datenbank, oder?

und einfach eine Stunde drauf zu rechnen, weil ich vermute das es mit den Zeitzonen zu tun haben könnte. Vermutlich ist das aber nicht der richtige Weg, zumal es ha halbjährlich eine Zeit Umstellung gibt.
Mit welcher Zeitzone wurde die (unbekannte) Datenbank (wegen deiner SQL) denn angelegt?

Ausgabe: (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
Oh Wunder (Berlin ist DE? Zeitzonen?)

Ist es möglich die Zeitzone in der Abfrage Global zu setzen, sodass alles Ergebnisse automatisch angepasst werden, ohne das ich jedes einzelne Ergebnis bearbeiten muss?
Nachträglich oder beim Anlegen eines neuen Datensatzes?

SET TimeZone 'W. Europe Standard Time'  
SELECT Name, Anlagedatum
FROM Tabelle1
Und warum sollte dann dort nicht der umgerechnete Wert von 01.01.1971 00:00:00 stehen? Wenn deine Datenbankabfrage entsprechend deiner Zeitzone eingegebene Datumswerte umrechnet? Du willst doch dein Anlagedatum -1 Stunde haben, also irgendetwas berechnen. https://danielpeters.eu/clevere-datums-tricks-mit-sql-tsql-mysql/


Ich hoffe ich habe verständlich ausgedrückt wo der Schuh drückt, und hoffe inständig das mir hier jemand helfen kann.
SQL Datenbank ist was? Version? Daten werden in welcher Zeitzone eingegeben?

Gruß,
Peter
ralfkausk
ralfkausk 08.08.2023 um 12:41:30 Uhr
Goto Top
[UPDATE]
Mir ist bei der Erstellung dieser Frage ein kleiner Fehler unterlaufen. Ich habe beim kopieren nicht aufgepasst und ein falsches Datum für das Ergebnis eingefügt.
Vorher: "1969-12-31 23:00:00.000"
Nachher: "1970-12-31 23:00:00.000"
Die Korrektur habe ich auch oben im Text korrigiert.
ralfkausk
ralfkausk 08.08.2023 um 12:49:55 Uhr
Goto Top
Zitat von @em-pie:

Moin,

witzig ist ja, dass dir das Ergebnis exakt 1 Jahr und 1 Tag abzieht:
(Mir wurde jedenfalls glaubhaft versichert, dass das Datum 01.01.1971 bei der Anlage verwendet wurde)
Wenn ich dieses Feld nun abfrage bekomme ich als Ergebnis "1969-12-31 23:00:00.000"
Es hätte ja wenn denn dann der 31.12.1970 23:00:00 ausgegeben werden müssen.

Kannst du das mal testen, was herauskommt, wenn man über das Eingabeformular etwas Neues einträgt?


Ansonsten kannst du die Lokale Zeit (inkl. Daylight-Saving-Time) so ausgeben lassen:
SELECT [neudatetime] = CONVERT(datetime, AnlageDatum AT TIME ZONE 'UTC' AT TIME ZONE 'Central European Standard Time')  

Zum Ergebnis
Das war tatsächlich ein Kopierfehler, in der Ausgabe steht natürlich "1970-12-31 23:00:00.000".

Deine Lösung das Datum zu konvertieren funktioniert!
Das ist zwar nicht ganz was ich mir erhofft hatte, weil ich das für jedes Attribut machen muss das ich mir ausgeben lassen möchte, aber immerhin bekomme ich so den Tatsächlichen Zeitstempel.

Vielen Dank