Ten artykuł zawiera przykłady konwersji daty wartość na przesunięcie daty i godziny wartość w SQL Server.
Po przekonwertowaniu daty wartość przesunięcie daty i godziny , dodatkowe informacje są dodawane do wartości. Dzieje się tak, ponieważ przesunięcie daty i godziny typ danych zawiera zarówno informacje o dacie i godzinie, jak i informacje o przesunięciu czasowym. Innymi słowy, przesunięcie daty i godziny typ danych definiuje datę połączoną z porą dnia, która ma świadomość strefy czasowej i jest oparta na zegarze 24-godzinnym. data z drugiej strony typ danych zawiera tylko informacje o dacie.
Kiedy konwertujemy od data na przesunięcie daty i godziny , czas (i przesunięcie strefy czasowej) jest automatycznie dodawany do wartości. Jednak zawsze możesz zmienić wartość, jeśli jest to wymagane (w tym przesunięcie strefy czasowej).
przesunięcie daty i godziny typ danych umożliwia również określenie dokładności ułamków sekund. Jeśli tego nie określisz, użyje skali 7. Oznacza to, że będzie zawierać 7 cyfr po prawej stronie przecinka dziesiętnego.
Przykład 1 – Konwersja niejawna
Oto przykład niejawnej konwersji między data i przesunięcie daty i godziny .
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
Wynik:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
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 przesunięcie daty i godziny zmienna.
Widzimy, że data zmienna zawiera tylko informacje o dacie, natomiast przesunięcie daty i godziny zmienna zawiera informacje o dacie, godzinie i przesunięciu strefy czasowej.
Podczas konwersji między datą i przesunięcie daty i godziny(7) (tj. przy użyciu skali 7), składnik czasu jest ustawiony na 00:00:00.0000000 +00:00
. Jest to również wartość domyślna, więc możesz pominąć wartość precyzji i użyje skali 7 (co daje precyzję 34). Jeśli wolisz, możesz zmniejszyć precyzję. Zmniejszenie precyzji może również zmniejszyć ilość miejsca wymaganego do przechowywania wartości.
Żeby było jasne, skaluj to liczba cyfr po prawej stronie przecinka dziesiętnego w liczbie. Precyzja to całkowita liczba cyfr w liczbie.
Przykład 2 – 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 przesunięcie daty i godziny .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetimeoffset) AS 'datetimeoffset';
Wynik:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
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, 7, CAST(@thedate AS datetimeoffset)) AS 'datetimeoffset';
Wynik:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
Pamiętaj, że nie możesz użyć DATEADD()
funkcja do modyfikacji składnika przesunięcia czasu. Ale nie martw się, jest sposób na jego modyfikację (czytaj dalej, aby dowiedzieć się, jak).
Przykład 3 – Jawna konwersja przy użyciu funkcji CONVERT()
Oto przykład jawnej konwersji przy użyciu CONVERT()
funkcja zamiast CAST()
.
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetimeoffset, @thedate) AS 'datetimeoffset';
Wynik:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
I dostosowanie czasu:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CONVERT(datetimeoffset, @thedate)) AS 'datetimeoffset';
Wynik:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
Przykład 4 – Modyfikacja przesunięcia czasowego
W poprzednich przykładach użyliśmy DATEADD()
funkcja do zmiany wartości czasu. Ta funkcja może służyć do modyfikowania dowolnej części składnika daty lub godziny, z wyjątkiem składnika przesunięcia czasu .
Jeśli chcesz zmienić przesunięcie czasu, możesz użyć TODATETIMEOFFSET()
funkcjonować. Możesz również użyć tej funkcji, aby przekonwertować oryginalną datę wartość na przesunięcie daty i godziny wartość. Ta funkcja akceptuje wartość daty (którą można rozwiązać do datetime2 wartość) oraz wartość przesunięcia.
Oto przykład:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset SET @thedate = '2020-12-01' SET @thedatetimeoffset = TODATETIMEOFFSET(@thedate, '+07:00') SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
Wynik:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
A oto przykład użycia funkcji w SELECT
oświadczenie:
DECLARE @thedate date = '2020-12-01' SELECT @thedate AS 'date', TODATETIMEOFFSET(@thedate, '+07:00') AS 'datetimeoffset';
Wynik:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
TODATETIMEOFFSET()
funkcja akceptuje również przesunięcie daty i godziny wartość jako pierwszy parametr, dzięki czemu można jej również użyć do zmodyfikowania istniejącego przesunięcia daty i godziny wartości w razie potrzeby.
Przykład:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset', TODATETIMEOFFSET(@thedatetimeoffset, '+07:00') AS 'Modified';
Wynik:
+------------+------------------------------------+------------------------------------+ | date | datetimeoffset | Modified | |------------+------------------------------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+------------------------------------+