Datetime Konvertieren MM/DD/YYYY hh:mm:ss PM(AM) in DD.MM.YYYY hh24:mm:ss

MSSQL NewBy

Neuer Benutzer
Beiträge
4
Hallo zusammen,

ich bin neu hier und habe folgendes Problem bei MSSQLServer:
Ich bekomme über eine Schnittstelle ein Datum in folgendem Format: '12/19/2022 3:50:55 PM'
das bräuchte ich aber wie folgt: '19.12.2022 15:50:55'
Kann mir jemand helfen?

Vielen Dank schon mal im Voraus
Klaus
 
Werbung:
sqlserver sollte das auch können, wenn es oracle kann...

weiß nicht genau, was alles im SQL-Standard enthalten ist und "ein jedes" SQL können sollte, denke aber, dass die to_char funktion dabei ist...

EDIT:
heißt nur anders, funktioniert offenbar genauso, hier gegoogelt und das ergebnis:
 
Danke für den Link, aber funktioniert leider nicht.
Weiter unten wird es auch so beschrieben:
1673277090700.png
Gleiche Erfahrung hab ich auch gemacht.
Ich denke es muss irgendwie über eine Kombination aus Format/Cast und Convert gehen.
 
Formate sind etwas anderes als Typen.
Wenn ich mit einem deutschen Betriebssystem eine amerikanische MSSQL Datenbank abfrage, bekomme ich die Daten in deutschem Format dargestellt. In Amerika oder mit einem amerikanischen Client bekomme ich entsprechend deren Formate angezeigt.

Die Anzeige eines Datums und das dabei verwendete Format sagen also eigentlich gar nichts aus.

Ganz andes verhält es sich, wenn ich einen Texttyp habe, der ein Datum darstellen soll. Das müsste zunächst in ein Datum >konvertiert< werden, damit man anschließend bequem mit beliebigen Formaten arbeiten kann.

Wenn man soetwas wie to_char(<spalte>, <format>) anwendet, kann es zu unerwarteten Ergebnissen kommen, wenn <spalte> kein Datumsformat ist. To_char(char, ...) ist offensichtlich uncool.

Also erstmal wäre interessant, welcher Typ in der Schnittstelle ankommt, dann ist das Format u.U. egal.
 
Code:
declare @date as datetime;
set @date = '12/19/2022 3:50:55 PM';

select format(@date, 'dd.MM.yyyy hh:mm:ss') as date;
so funktioniert das tadellos. Natürlich muss @date auch ein datetime Datentyp sein. Wenns was anders ist gehts nicht.
 
@t-sql: Vielen Dank. Ich denke, das war die Lösung. Der Datentyp war entscheidend. Im Grundsatz hat's geklappt.
Jetzt muss ich das nur noch in den Kontext meiner Prozedur "einbauen"

VG Klaus
 
Hallo,
ich klinke mich mal hier ein, da ich ein ähnliches Problem mit dem Format / Darstellung von Datum und Zeiten habe und leider überhaupt nicht verstehe, warum das so ist. Vielleicht kann mir das jemand erklären, zum Problem:

Die Abfrage:
SQL:
DECLARE @timeStart datetime = '2023-01-24 13:50:00'
DECLARE @timeEnd datetime = '2023-01-24 15:00:00'

select *
from MeineDB MID
where  MID.CreationTime between @timeStart and @timeEnd

gibt Fehler aus, da "Bei der Konvertierung eines varchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs."
Ok, also vertausche ich einfach mal MM und DD und versuche es erneut:

SQL:
DECLARE @timeStart datetime = '2023-24-01 13:50:00' -- Monat und Tag getauscht!
DECLARE @timeEnd datetime = '2023-24-01 15:00:00'   -- Monat und Tag getauscht!

select *
from MeineDB MID
where  MID.CreationTime between @timeStart and @timeEnd

funktioniert!
Ändere ich in der Abfrage datetime zu datetime2 funktioniert es auch mit der "korrekten" Schreibweise:

SQL:
DECLARE @timeStart datetime2 = '2023-01-24 13:50:00'
DECLARE @timeEnd datetime2 = '2023-01-24 15:00:00'

select *
from MeineDB MID
where  MID.CreationTime between @timeStart and @timeEnd

warum ist das so?

Hinweis: mein MS SQL Server Management Studio läuft auf einem deutschen Windows, der MS SQL Server auf einem englischen Windows Server. Führe ich die Abfrage direkt auf dem SQL-Server durch (lokales MS SMS) klappt auch die korrekte Schreibweise mit datetime (erstes Beispiel).

Wer kann mir diese Unterschiede im datetime erläutern?

Danke und Gruß,
Frank
 
Datetime und Datetime2 sollten sich nur in Genauigkeit und Größe unterscheiden, nicht in regionalen Einstellungen.

Deine Tabelle heißt MariaDB, tatsächlich liegt die aber in der MSSQL DB oder ist das ein linked server oder dergleichen?

Bei MSSQL spielen die Betriebssystemeinstellungen in Bezug auf Sprache und Region nach meinem Verständnis keine Rolle. Die Einstellung der Datenbank und des Clients (SSMS) natürlich schon. Das musst du aber wirklich in deinem Fall mal selbst nachvollziehen:

Ich empfehle dir unbedingt immer explizit zu konvertieren. Du solltest das Datum wie eine Zeichenkette behandeln und das interpretieren nicht allein dem Server überlassen, also
Code:
DECLARE @timeStart datetime = convert(DATETIME,'2023-01-24 13:50:00',120)
 
Werbung:
Danke Ukulele,
mit der Konvertierung funktioniert es.

Die Spracheinstellung habe ich geprüft, ist bei beiden Rechnern Deutsch (also doch nicht wie geschrieben deutsch und englisch).
Der Unterschied in der Verwendung von datetime und datetime2 ist mir dennoch ein Rätsel. Ich versuch das weiter zu eruieren.

Nein, meine Tabelle habe ich MeineDB genannt, weil der eigentliche Name recht lang ist.... :)
 
Zurück
Oben