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

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

Ten artykuł zawiera przykłady konwersji data/godzina2 wartość do smalldatetime wartość w SQL Server.

Jedna z korzyści konwersji data/godzina2 wartość smalldatetime polega na zmniejszeniu rozmiaru pamięci z 7, 8 lub 9 bajtów do 4 bajtów. Tracisz jednak precyzję.

data/godzina2 typ danych umożliwia określenie dokładności ułamka sekundy od 0 do 7. Jeśli nie określisz tego, użyje 7 (wartość domyślna). Jeśli podasz zero (0 ), jego dokładność będzie z dokładnością do najbliższej sekundy.

smalldatetime z drugiej strony typ danych nie ma żadnych ułamków sekund, a jego składnik sekund jest zawsze ustawiony na zero (:00). Jego dokładność jest do najbliższej minuty.

Po przekonwertowaniu data/godzina2 wartość smalldatetime , kopiowana jest data i część czasu. Składnik sekund jest ustawiony na zero (niezależnie od pierwotnej wartości składnika sekund), a czas jest zaokrąglany do najbliższej minuty. Wszelkie ułamki sekund są usuwane.

Przykład 1 – Konwersja niejawna

Oto przykład niejawnej konwersji między datetime2 i smalldatetime .

DECLARE 
  @thedatetime2 datetime2, 
  @thesmalldatetime smalldatetime;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thesmalldatetime = @thedatetime2;
SELECT 
  @thedatetime2 AS 'datetime2',
  @thesmalldatetime AS 'smalldatetime';

Wynik:

+-----------------------------+---------------------+
| datetime2                   | smalldatetime       |
|-----------------------------+---------------------|
| 2025-05-21 10:15:30.1234567 | 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 tym przypadku SQL Server wykonuje niejawną konwersję za kulisami, gdy próbujemy przypisać datetime2 wartość do smalldatetime zmienna.

W tym przykładzie widzimy, że smalldatetime wartość nie obejmuje ułamków sekund, sekundy zostały ustawione na zero, a minuty zostały zaokrąglone w górę.

W tym przypadku datetime2 wartość używa precyzji 7. Dzieje się tak, ponieważ 7 jest wartością domyślną. Nie określiłem precyzji i dlatego użyto wartości domyślnej.

Ale dałoby to ten sam wynik, niezależnie od wybranej przeze mnie precyzji. Nawet gdybym zredukował go do zera (tj. zadeklarował jako datetime2(0) ), i tak zwróciłby ten sam wynik.

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

DECLARE @thedatetime2 datetime2(0);
SET @thedatetime2 = '2025-05-21 10:15:30';
SELECT 
  @thedatetime2 AS 'datetime2',
  CAST(@thedatetime2 AS smalldatetime) AS 'smalldatetime';

Wynik:

+---------------------+---------------------+
| datetime2           | smalldatetime       |
|---------------------+---------------------|
| 2025-05-21 10:15:30 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

W tym przykładzie zdecydowałem się użyć skali zerowej dla datetime2 wartość (np. datetime2(0) ), jednak nie ma to wpływu na wynikowy smalldatetime wartość.

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

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

DECLARE @thedatetime2 datetime2(0);
SET @thedatetime2 = '2025-05-21 10:15:30';
SELECT 
  @thedatetime2 AS 'datetime2',
  CONVERT(smalldatetime, @thedatetime2) AS 'smalldatetime';

Wynik:

+---------------------+---------------------+
| datetime2           | smalldatetime       |
|---------------------+---------------------|
| 2025-05-21 10:15:30 | 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. Porównanie typów danych daty i godziny w SQL Server

  2. SQL Server:użyj parametru w CREATE DATABASE

  3. Importuj plik CSV do SQL Server

  4. Przekroczono limit czasu zapytania z aplikacji internetowej, ale działa dobrze w studiu zarządzania

  5. CURRENT_TIMESTAMP Przykłady w SQL Server (T-SQL)