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

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

Ten artykuł zawiera przykłady konwersji smalldatetime wartość do daty i godziny 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.

data i godzina z drugiej strony typ danych zawiera 3-cyfrową część ułamkową sekund, a jego dokładność jest zaokrąglana do przyrostów o 0,000, 0,003 lub 0,007 sekundy.

Po przekonwertowaniu smalldatetime wartość do data i godzina , smalldatetime wartość jest kopiowana do data i godzina wartość. Ułamki sekund są ustawione na 0.

W większości przypadków lepiej będzie przekonwertować na datetime2 typ danych zamiast data i godzina . W ten sposób zapewnisz większą dokładność przy użyciu tego samego rozmiaru pamięci. Jeśli jednak naprawdę potrzebujesz, to data i godzina , oto kilka przykładów.

Przykład 1 – Konwersja niejawna

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

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

Wynik:

+---------------------+-------------------------+
| smalldatetime       | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

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 daty i godziny zmienna.

W tym przykładzie widzimy, że smalldatetime wartość nie zawiera ułamków sekund, sekundy zostały ustawione na zero, a minuta została zaokrąglona w górę od rzeczywistej wartości, którą próbowałem jej przypisać.

Jednak data i godzina wartość zawiera 3-cyfrową część ułamkową, która jest ustawiona na zero.

Przykład 2 – zmiana części ułamkowej

Mimo że część ułamkowa jest ustawiona na zero, po przekonwertowaniu wartości na data-godzina , możesz teraz zmienić część ułamkową (i drugą część, jeśli o to chodzi).

W tym przykładzie używam DATEADD() funkcja do zmiany ułamków sekund datetime wartość.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime datetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime AS 'datetime',
  DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';

Wynik (przy użyciu wyjścia pionowego):

smalldatetime     | 2025-05-21 10:16:00
datetime          | 2025-05-21 10:16:00.000
datetime Modified | 2025-05-21 10:16:00.123

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 data i godzina .

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

Wynik:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

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

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

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

Wynik:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

Jak wspomniano, rozważ konwersję na datetime2 typ danych zamiast data i godzina . Takie postępowanie zapewnia większą dokładność przy użyciu tego samego rozmiaru pamięci.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak podłączyć serwer sql za pomocą sterownika JTDS w systemie Android

  2. TSQL:Utwórz widok, który ma dostęp do wielu baz danych

  3. Jak uniknąć błędu dzielenia przez zero w SQL?

  4. Rozwiązywanie problemów z brakiem wątków roboczych

  5. warunkowe ograniczenie unikatowe