217 Stimmen

Sql Server String in Datum umwandeln

Ich möchte eine Zeichenkette wie diese konvertieren:

'10/15/2008 10:06:32 PM'

in den entsprechenden DATETIME-Wert in Sql Server.

Bei Oracle würde ich dies sagen:

TO_DATE('10/15/2008 10:06:32 PM','MM/DD/YYYY HH:MI:SS AM')

Diese Frage impliziert, dass ich die Zeichenkette in eine der folgenden Kategorien zerlegen muss Standardformate und konvertieren Sie dann mit einem dieser Codes. Das erscheint mir für einen so banalen Vorgang lächerlich. Gibt es einen einfacheren Weg?

0 Stimmen

0 Stimmen

Die Frage sollte so bearbeitet werden, dass sie eine allgemeinere Frage zur Konvertierung von einem erwarteten Eingabeformat in ein neues Ausgabeformat stellt. Und die Antworten würden dann nicht nur seine, sondern auch die Fragen aller anderen abdecken. Die Frage ist zwar implizit gestellt, sollte aber explizit gestellt werden. Um keine unnötige Diskussion über die eigentliche Frage zu verursachen.

3voto

SyWill Punkte 61

Persönlich, wenn Ihr Umgang mit willkürlichen oder völlig aus der Wand Formate, vorausgesetzt, Sie wissen, was sie sind vor der Zeit oder werden dann einfach regexp verwenden, um die Abschnitte des Datums Sie wollen und bilden eine gültige Datum / Uhrzeit-Komponente.

3voto

tvanfosson Punkte 506878

Diese Seite hat einige Referenzen für alle angegebenen Datumsumwandlungen, die der Funktion CONVERT zur Verfügung stehen. Wenn Ihre Werte nicht in eines der akzeptablen Muster fallen, dann denke ich, dass es am besten ist, den Weg über ParseExact zu gehen.

0 Stimmen

Link ist defekt.

1voto

user12913610 Punkte 1

String in MSSQL implizit in Datetime umwandeln

create table tmp 
(
  ENTRYDATETIME datetime
);

insert into tmp (ENTRYDATETIME) values (getdate());
insert into tmp (ENTRYDATETIME) values ('20190101');  --convert string 'yyyymmdd' to datetime

select * from tmp where ENTRYDATETIME > '20190925'  --yyyymmdd 
select * from tmp where ENTRYDATETIME > '20190925 12:11:09.555'--yyyymmdd HH:MIN:SS:MS

0 Stimmen

Hallo und willkommen bei Stackoverflow, und danke für die Antwort. Obwohl dieser Code die Frage beantworten könnte, könnten Sie in Betracht ziehen, eine Erklärung hinzuzufügen, was das Problem war, das Sie gelöst haben, und wie Sie es gelöst haben? Dies wird zukünftigen Lesern helfen, Ihre Antwort besser zu verstehen und daraus zu lernen.

1voto

Will Rickards Punkte 2748

Wenn Sie möchten, dass SQL Server versucht, es herauszufinden, verwenden Sie einfach CAST CAST('was auch immer' AS datetime) Das ist jedoch im Allgemeinen eine schlechte Idee. Es gibt Probleme mit internationalen Daten, die auftauchen würden. Um diese Probleme zu vermeiden, sollten Sie das kanonische ODBC-Format für das Datum verwenden. Das ist die Formatnummer 120, 20 ist das Format für zweistellige Jahreszahlen. Ich glaube nicht, dass SQL Server eine eingebaute Funktion hat, mit der Sie ein benutzerdefiniertes Format angeben können. Sie können Ihre eigene Funktion schreiben und vielleicht sogar eine finden, wenn Sie online suchen.

0 Stimmen

Wenn Sie internationale Daten in einer einzigen Spalte haben, stimme ich absolut zu, dass die Verwendung einer Formatnummer eine gute Idee ist. Wenn Sie internationale Daten und US-Daten in einer einzigen Spalte gemischt haben, gibt es keine Möglichkeit, den Unterschied zwischen z. B. 7/6/2000 und 6/7/2000 festzustellen, es sei denn, Sie haben eine Schwesterspalte, die das Format erklärt. Aus diesem Grund MUSS die Datenqualität an der Quelle einfach gegeben sein. Wenn Sie wissen, dass Sie, sagen wir, alle US-Datumsangaben haben, lassen Sie die impliziten Konvertierungen ihr Ding machen. Wenn sie fehlschlagen, dann wissen Sie mit Sicherheit, dass etwas in der Spalte korrigiert werden muss.

0voto

Venugopal M Punkte 2135

Sie können dies ganz einfach mit diesem Code erreichen.

SELECT Convert(datetime, Convert(varchar(30),'10/15/2008 10:06:32 PM',102),102)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X