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

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

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

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

datetime2 z drugiej strony 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.

Po przekonwertowaniu smalldatetime wartość datetime2 , kopiowane są godziny i minuty. Sekundy i ułamki sekund są ustawione na 0.

Przykład 1 – Konwersja niejawna

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

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

Wynik:

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

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ć smalldatetime wartość do datetime2 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. Powoduje to użycie 7 zer w części ułamkowej.

Przykład 2 – Usuń część ułamkową

W razie potrzeby możesz usunąć ułamki sekund. Aby to zrobić, po prostu użyj datetime2(0) podczas deklarowania zmiennej.

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

Wynik:

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

W tym przypadku oba typy danych zwracają tę samą wartość. Różnica polega jednak na tym, że datetime2 ma możliwość zapewnienia dokładności co do sekundy (w porównaniu z smalldatetime dokładność co do minuty).

Przykład:

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

Wynik:

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

W tym przykładzie użyłem DATEADD() funkcja dodawania 30 sekund do każdej wartości. Jednak każdy typ danych zwraca inny wynik. datetime2 typ danych uwzględnia część sekundową i zapewnia poprawny wynik ze 100% dokładnością. smalldatetime z drugiej strony typ, jest zaokrąglany w górę do najbliższej minuty (podczas gdy część sekund pozostaje na zero).

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

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

Wynik:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

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

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

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

Wynik:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16: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. @@ROWCOUNT — Uzyskaj liczbę wierszy, których dotyczy ostatnia instrukcja w SQL Server

  2. EXISTS vs JOIN i użycie klauzuli EXISTS

  3. Jak wstawiać wiersze do tabeli SQL Server za pomocą interfejsu graficznego Edit Table Rows — SQL Server / TSQL Tutorial, część 101

  4. Jak zwrócić listę typów danych w SQL Server (T-SQL)

  5. Zmień przesunięcie strefy czasowej w wartości przesunięcia daty i godziny w programie SQL Server (T-SQL)