W wyciągu, z którym mam do czynienia, mam 2 datetime
kolumny. Jedna kolumna przechowuje daty, a druga godziny, jak pokazano.
Jak mogę wysłać zapytanie do tabeli, aby połączyć te dwa pola w 1 kolumnę typu datetime
?
Daktyle
2009-03-12 00:00:00.000
2009-03-26 00:00:00.000
2009-03-26 00:00:00.000
Czasy
1899-12-30 12:30:00.000
1899-12-30 10:00:00.000
1899-12-30 10:00:00.000
źródło
1900-01-01
: nie?float
. Gdzie, u licha, nauczyłeś się tego? Są one przechowywane jako liczby całkowite : część daty to liczba dni od daty zakotwiczenia, a część czasu to liczba „tyknięć” od północy, przy czym tiki są zdefiniowane jako 1/300 s dla,datetime
a dokładniej dlatime
idatetime2
.Jeśli element czasu w kolumnie daty i element daty w kolumnie czasu są równe zero , odpowiedź Lieven jest tym, czego potrzebujesz. Jeśli nie możesz zagwarantować, że tak będzie zawsze, będzie to nieco bardziej skomplikowane:
źródło
The data types datetime and time are incompatible in the add operator.
Jest to alternatywne rozwiązanie bez konwersji znaków:
W ten sposób uzyskasz dokładność tylko w milisekundach, ale normalnie byłoby to OK. Przetestowałem to w SQL Server 2008.
źródło
To zadziałało dla mnie
(w SQL 2008 R2)
źródło
Jeśli nie używasz SQL Server 2008 (tzn. Masz tylko typ danych DateTime), możesz użyć następującego (co prawda zgrubnego i gotowego) TSQL, aby osiągnąć to, co chcesz:
Jest szorstki i gotowy, ale działa!
źródło
Jeśli oba pola są datetime, wystarczy dodać te pola.
na przykład:
Jeśli użyłeś typu daty i godziny, po prostu rzutuj czas na datę i godzinę
na przykład:
źródło
Konwertuj pierwszą datę przechowywaną w polu daty i godziny na ciąg, a następnie przekonwertuj czas przechowywany w polu daty i godziny na ciąg, dołącz dwie i przekonwertuj z powrotem na pole daty i godziny za pomocą znanych formatów konwersji.
źródło
Miałem wiele błędów, jak wspomniano powyżej, więc zrobiłem to w ten sposób
To zadziałało dla mnie.
źródło
Konwertuj oba pola na DATETIME:
a jeśli używasz,
Getdate()
użyj tego w pierwszej kolejności:źródło
Wydruki:
źródło
Działa jak marzenie
źródło
WYBIERZ CAST (CAST (@DateField As Date) As DateTime) + CAST (CAST (@TimeField As Time) As DateTime)
źródło
Innym sposobem jest użycie
CONCAT
iCAST
należy pamiętać, że musisz go użyć,DATETIME2(x)
aby działał. Możesz ustawićx
dowolną wartość pomiędzy0-7
7
bez utraty precyzji.Zwroty
2018-03-12 07:00:00.0000000
Testowane na SQL Server 14
źródło
Aby połączyć datę z kolumny z datą i godziną z innej kolumny z datą, jest to najlepsze najszybsze rozwiązanie dla Ciebie:
źródło
Zetknąłem się z podobną sytuacją, w której musiałem scalić pola daty i godziny z polem daty i godziny. Żadne z wyżej wymienionych rozwiązań nie działa, szczególnie dodanie dwóch pól jako typu danych dla dodania tych dwóch pól nie jest takie samo.
Stworzyłem poniższe rozwiązanie, w którym do daty dodałem godzinę, a następnie minutę. To działało dla mnie pięknie. Sprawdź to i daj mi znać, jeśli napotkasz jakiekolwiek problemy.
; z tbl as (wybierz StatusTime = '12 / 30/1899 5:17:00 PM ', StatusDate =' 7/24/2019 12:00:00 AM ') wybierz DATEADD (MI, DATEPART (MINUTE, CAST (tbl .StatusTime AS TIME)), DATEADD (HH, DATEPART (HOUR, CAST (tbl.StatusTime AS TIME)), CAST (tbl.StatusDate as DATETIME))) od tbl
Wynik: 2019-07-24 17: 17: 00.000
źródło