Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Konwertuj „datetimeoffset” na „date” w SQL Server (przykłady T-SQL)

Jeśli masz przesunięcie daty i godziny wartość, ale nie potrzebujesz części przesunięcia czasu i strefy czasowej, konwertując ją na datę zaoszczędzi Ci dużo miejsca do przechowywania (usuwając niepotrzebne szczegóły z wartości). Ten artykuł zawiera przykłady konwersji przesunięcia daty i godziny wartość na datę wartość w SQL Server.

przesunięcie daty i godziny typ danych zawiera datę i godzinę z przesunięciem strefy czasowej. Ma również część ułamków sekund od 0 do 7 (zależy to od liczby przypisanych do niej ułamków sekund). Odbywa się to za pomocą datetimeoffset(n) składnia. Jeśli tego nie określisz, użyje 7 (domyślnie). Rozmiar pamięci tego typu danych wynosi 8, 9 lub 10 bajtów (plus 1 bajt do przechowywania precyzji), w zależności od używanej precyzji. Jego dokładność wynosi 100 nanosekund.

data z drugiej strony typ danych zawiera tylko datę. Nie zawiera czasu i ma dokładność 1 dnia. Do przechowywania używa 3 bajtów.

Kiedy konwertujesz przesunięcie daty i godziny wartość na datę typ danych, tracisz część czasu (w tym przesunięcie strefy czasowej). Jednak zmniejszasz również rozmiar pamięci do stałych 3 bajtów. Oczywiście wykonałbyś tę konwersję tylko wtedy, gdy nie potrzebujesz części czasu i przesunięcia strefy czasowej.

Przykład 1 – Konwersja niejawna

Oto przykład niejawnej konwersji między przesunięciem daty i godziny i data .

DECLARE 
  @thedatetimeoffset datetimeoffset, 
  @thedate date;
SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30';
SET @thedate = @thedatetimeoffset;
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  @thedate AS 'date';

Wynik:

+------------------------------------+------------+
| datetimeoffset                     | date       |
|------------------------------------+------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |
+------------------------------------+------------+

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ć przesunięcie daty i godziny wartość na datę zmienna.

Tutaj widzimy, że data wartość zawiera tylko datę (bez składnika czasu). Składnik czasu, w tym przesunięcie strefy czasowej, został usunięty z wartości.

W tym przykładzie przesunięcie daty i godziny value używa domyślnej precyzji (co daje 7 miejsc po przecinku). Powoduje to, że typ danych wykorzystuje 10 bajtów (w rzeczywistości 11 bajtów, jeśli policzysz dodatkowy bajt przechowujący precyzję). data value wykorzystuje tylko 3 bajty.

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, aby jawnie przekonwertować między przesunięciem daty i godziny i data .

DECLARE @thedatetimeoffset datetimeoffset;
SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30';
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  CAST(@thedatetimeoffset AS date) AS 'date'; 

Wynik:

+------------------------------------+------------+
| datetimeoffset                     | date       |
|------------------------------------+------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |
+------------------------------------+------------+

Przykład 3 – Jawna konwersja przy użyciu funkcji CONVERT()

Oto przykład jawnej konwersji przy użyciu CONVERT() funkcja zamiast CAST() .

DECLARE @thedatetimeoffset datetimeoffset;
SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30';
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  CONVERT(date, @thedatetimeoffset) AS 'date';

Wynik:

+------------------------------------+------------+
| datetimeoffset                     | date       |
|------------------------------------+------------|
| 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |
+------------------------------------+------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unikanie zakleszczeń SQL dzięki dostrajaniu zapytań:porady Brenta Ozara

  2. Jak mogę wstawić dane do SQL Server za pomocą VBNet?

  3. 🆕 Pierwsze spojrzenie na SQL Server 2022 — 5 najlepszych nowych funkcji (dodatkowe 5 funkcji)

  4. Uzyskiwanie ostrzeżenia:wartość Null jest eliminowana przez agregację lub inną operację SET

  5. Jak naprawić „Tylko jedno wyrażenie można określić na liście wyboru…” w SQL Server