Ten artykuł zawiera przykłady konwersji daty wartość na data i godzina wartość w SQL Server.
Po przekonwertowaniu daty wartość do data i godzina , dodatkowe informacje są dodawane do wartości. Dzieje się tak, ponieważ data i godzina typ danych zawiera zarówno informacje o dacie, jak i godzinie. data z drugiej strony typ danych zawiera tylko informacje o dacie.
Przykład 1 – Konwersja niejawna
Oto przykład niejawnej konwersji między data i data i godzina .
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Wynik:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Jest to niejawna konwersja, ponieważ nie używamy funkcji konwersji (takich jak te poniżej) do jawnej konwersji. W takim przypadku SQL Server wykonuje niejawną konwersję za kulisami, gdy próbujemy przypisać datę wartość na data i godzina zmienna.
Widzimy, że data zmienna zawiera tylko informacje o dacie, natomiast data-godzina zmienna zawiera zarówno informacje o dacie, jak i godzinie.
Podczas konwersji między datą i data i godzina , składnik czasu jest ustawiony na 00:00:00.000
. Dzieje się tak, ponieważ wartość daty nie zawiera żadnych informacji o czasie, więc nie ma możliwości, aby SQL Server wiedział, która godzina jest potrzebna (jeśli w ogóle).
Przykład 2 – Modyfikacja czasu
Jeśli chcesz zmienić godzinę (ale zachować tę samą datę), możesz użyć DATEADD()
funkcja właśnie to zrobić.
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SET @thedatetime = DATEADD(hour, 8, @thedatetime) SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Wynik:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Przykład 3 – Jawna konwersja za pomocą CAST()
Oto przykład jawnej konwersji. W tym przypadku używam CAST()
działać bezpośrednio w SELECT
oświadczenie o jawnej konwersji między datą i data i godzina .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetime) AS 'datetime';
Wynik:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Więc otrzymujemy ten sam wynik, co niejawna konwersja.
Możemy również dostosować czas w ten sposób:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';
Wynik:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Przykład 4 – Jawna konwersja przy użyciu funkcji CONVERT()
Oto przykład jawnej konwersji przy użyciu metody CONVERT()
funkcja zamiast CAST()
.
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime, @thedate) AS 'datetime';
Wynik:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
I dostosowanie czasu:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';
Wynik:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+