Sie können einfach die beiden hinzufügen.
- wenn die
Time part
Ihrer Date
Spalte immer Null ist
- und die
Date part
Ihrer Time
Spalte ist auch immer Null (Basisdatum: 1. Januar 1900)
Wenn Sie sie hinzufügen, erhalten Sie das richtige Ergebnis.
SELECT Combined = MyDate + MyTime FROM MyTable
Begründung (ein großes Lob an ErikE / dnolan)
Dies funktioniert aufgrund der Art und Weise, wie das Datum als zwei 4-Bytes gespeichert wird,
Integers
wobei das linke 4-Byte das date
und das rechte 4-Byte das ist time
. Es ist wie zu tun$0001 0000 + $0000 0001 =
$0001 0001
Bearbeiten Sie neue SQL Server 2008-Typen
Date
und Time
sind Typen eingeführt in SQL Server 2008
. Wenn Sie darauf bestehen, hinzuzufügen, können Sie verwendenCombined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
Edit2 bezüglich Genauigkeitsverlust in SQL Server 2008 und höher (ein großes Lob an Martin Smith)
Schauen Sie sich an, wie Datum und Uhrzeit in SQL Server mit datetime2 kombiniert werden. um Präzisionsverluste mit SQL Server 2008 und höher zu vermeiden.
Lieven Keersmaekers
quelle
1900-01-01
, nein?float
. Wo um alles in der Welt hast du das gelernt? Sie werden als Ganzzahlen gespeichert : Der Datumsanteil ist die Anzahl der Tage seit einem Ankerdatum, und der Zeitanteil ist die Anzahl der "Ticks" seit Mitternacht, wobei Ticks als 1/300 s fürdatetime
und genauer fürtime
und definiert sinddatetime2
.Wenn das Zeitelement Ihrer Datumsspalte und das Datumselement Ihrer Zeitspalte beide Null sind, ist Lievens Antwort genau das, was Sie brauchen. Wenn Sie nicht garantieren können, dass dies immer der Fall sein wird, wird es etwas komplizierter:
quelle
The data types datetime and time are incompatible in the add operator.
Dies ist eine alternative Lösung ohne Zeichenkonvertierung:
Auf diese Weise erhalten Sie nur eine Millisekundengenauigkeit, aber das wäre normalerweise in Ordnung. Ich habe dies in SQL Server 2008 getestet.
quelle
Das hat bei mir funktioniert
(unter SQL 2008 R2)
quelle
Wenn Sie SQL Server 2008 nicht verwenden (dh Sie haben nur einen DateTime-Datentyp), können Sie die folgende (zugegebenermaßen grobe und fertige) TSQL verwenden, um das zu erreichen, was Sie möchten:
Es ist rau und fertig, aber es funktioniert!
quelle
Wenn beide Felder datetime sind, funktioniert das einfache Hinzufügen dieser Felder.
z.B:
Wenn Sie den Datentyp Datum und Uhrzeit verwendet haben, wandeln Sie die Uhrzeit einfach in Datum und Uhrzeit um
z.B:
quelle
Konvertieren Sie das erste in einem Datum / Uhrzeit-Feld gespeicherte Datum in eine Zeichenfolge, konvertieren Sie dann die in einem Datum / Uhrzeit-Feld gespeicherte Zeit in eine Zeichenfolge, hängen Sie die beiden an und konvertieren Sie sie wieder in ein Datum / Uhrzeit-Feld, wobei alle bekannten Konvertierungsformate verwendet werden.
quelle
Ich hatte viele Fehler wie oben angegeben, also habe ich es so gemacht
Es hat bei mir funktioniert.
quelle
Konvertieren Sie beide Felder in DATETIME:
und wenn Sie verwenden,
Getdate()
verwenden Sie dies zuerst:quelle
Drucke:
quelle
Klappt wunderbar
quelle
SELECT CAST (CAST (@DateField als Datum) als DateTime) + CAST (CAST (@TimeField als Zeit) als DateTime)
quelle
Eine andere Möglichkeit besteht darin, zu verwenden
CONCAT
undCAST
sich dessen bewusst zu sein, dass Sie es verwenden müssenDATETIME2(x)
, damit es funktioniert. Sie könnenx
alles einstellen , was0-7
7
bedeutet, dass kein Genauigkeitsverlust vorliegt.Kehrt zurück
2018-03-12 07:00:00.0000000
Getestet auf SQL Server 14
quelle
Um das Datum aus einer Datums- / Uhrzeitspalte und die Uhrzeit aus einer anderen Datums- / Uhrzeitspalte zu kombinieren, ist dies die beste und schnellste Lösung für Sie:
quelle
Ich hatte eine ähnliche Situation, in der ich Datums- und Zeitfelder mit DateTime-Feldern zusammenführen musste. Keine der oben genannten Lösungen funktioniert, insbesondere das Hinzufügen von zwei Feldern als Datentyp für das Hinzufügen dieser beiden Felder ist nicht identisch.
Ich habe die folgende Lösung erstellt, bei der ich dem Datum einen Stunden- und einen Minutenteil hinzugefügt habe. Das hat bei mir wunderbar funktioniert. Bitte probieren Sie es aus und lassen Sie mich wissen, wenn Sie auf Probleme stoßen.
; mit tbl als (wählen Sie StatusTime = '12 / 30/1899 17:17:00 PM ', StatusDate =' 24.07.2019 00:00:00 ') wählen Sie DATEADD (MI, DATEPART (MINUTE, CAST (tbl .StatusTime AS TIME)), DATEADD (HH, DATEPART (STUNDE, CAST (tbl.StatusTime AS TIME)), CAST (tbl.StatusDate as DATETIME))) von tbl
Ergebnis: 2019-07-24 17: 17: 00.000
quelle