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

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

Ten artykuł zawiera przykłady konwersji przesunięcia daty i godziny wartość smalldatetime w SQL Server.

Kiedy konwertujesz przesunięcie daty i godziny wartość smalldatetime , kopiowana jest data i godziny. Minuty są zaokrąglane w górę (w zależności od wartości sekund), a sekundy są ustawiane na 0.

przesunięcie daty i godziny typ danych pozwala określić precyzję ułamków sekund od 0 do 7. Jest to realizowane za pomocą datetimeoffset(n) składnia. Jeśli tego nie określisz, użyje 7 (domyślnie). Ma również przesunięcie strefy czasowej. Rozmiar pamięci tego typu danych wynosi 8, 9 lub 10 bajtów (plus 1 bajt na precyzję), w zależności od używanej precyzji.

smalldatetime z drugiej strony typ danych nie ma świadomości strefy czasowej, a zatem nie obejmuje żadnego przesunięcia strefy czasowej. Nie ma również żadnych ułamków sekund, a jego składnik sekund jest zawsze ustawiony na zero (:00). Jego dokładność jest do najbliższej minuty. Rozmiar pamięci tego typu danych jest ustalony na 4 bajty.

Przykład 1 – Konwersja niejawna

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

DECLARE 
  @thedatetimeoffset datetimeoffset, 
  @thesmalldatetime smalldatetime;
SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00';
SET @thesmalldatetime = @thedatetimeoffset;
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  @thesmalldatetime AS 'smalldatetime';

Wynik:

+------------------------------------+---------------------+
| datetimeoffset                     | smalldatetime       |
|------------------------------------+---------------------|
| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16: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ć przesunięcie daty i godziny wartość do smalldatetime zmienna.

Widzimy, że smalldatetime zmienna nie ma dokładności ułamków sekund, a jej sekundy zostały ustawione na zero. Ponadto minuty zostały zaokrąglone w górę, ponieważ pierwotna wartość miała wartość 30 sekund.

Kolejną obserwacją jest obcięcie przesunięcia strefy czasowej — smalldatetime typ danych nie ma świadomości strefy czasowej.

W tej konwersji rozmiar pamięci zmniejszył się z 10 bajtów (11 bajtów, gdy liczysz precyzję) dla przesunięcie daty i godziny , do 4 bajtów dla smalldatetime .

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 smalldatetime .

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

Wynik:

+------------------------------------+-------------------------+
| datetimeoffset                     | smalldatetime           |
|------------------------------------+-------------------------|
| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00     |
+------------------------------------+-------------------------+

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 +07:00';
SELECT 
  @thedatetimeoffset AS 'datetimeoffset',
  CONVERT(smalldatetime, @thedatetimeoffset) AS 'smalldatetime';

Wynik:

+------------------------------------+-------------------------+
| datetimeoffset                     | smalldatetime           |
|------------------------------------+-------------------------|
| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00     |
+------------------------------------+-------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiedy używałbyś funkcji z wartościami przechowywanymi w tabeli?

  2. Utworzyć procedury składowane przy użyciu Entity Framework Code First?

  3. Jak znaleźć wszystkie tabele z kolumną tożsamości w bazie danych SQL Server — SQL Server / T-SQL Tutorial, część 45

  4. Usuń wypełnienie podczas wysyłania wyników zapytania w wiadomości e-mail z serwera SQL (T-SQL)

  5. Jak usunąć pierwsze 1000 wierszy z tabeli za pomocą SQL Server 2008?