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

Przykłady konwersji „smalldatetime” na „datetime” w SQL Server (T-SQL)

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

Po przekonwertowaniu smalldatetime wartość do data i godzina , godziny i minuty są kopiowane, a sekundy i ułamki sekund są ustawiane na 0 .

Przykład 1 – 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 z smalldatetime do data/godzina .

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime) AS 'datetime';

Wynik:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Po pierwsze, widzimy, że thesmalldatetime wartość używa 00 dla składnika sekund, mimo że jawnie ustawiliśmy go na 29 . Dzieje się tak, ponieważ podczas korzystania z thesmalldatetime typ danych, sekundy są zawsze równe zero (i bez ułamków sekund).

Dlatego, gdy konwertujemy wartość na data-godzina , wartość sekund (i ułamki sekund) jest ustawiona na zero. Gdybyśmy właśnie przypisali oryginalną wartość do datetime po pierwsze, sekundy pozostałyby nienaruszone:

DECLARE @thedatetime datetime
SET @thedatetime = '2031-03-25 11:15:29'
SELECT @thedatetime AS 'thedatetime';

Wynik:

+-------------------------+
| thedatetime             |
|-------------------------|
| 2031-03-25 11:15:29.000 |
+-------------------------+

Nie tylko sekundy pozostałyby nienaruszone, ale także wszystkie ułamki sekund pozostałyby nienaruszone (ale tylko do skali 3):

DECLARE @thedatetime datetime
SET @thedatetime = '2031-03-25 11:15:29.123'
SELECT @thedatetime AS 'thedatetime';

Wynik:

+-------------------------+
| thedatetime             |
|-------------------------|
| 2031-03-25 11:15:29.123 |
+-------------------------+

Przykład 2 – Zaokrąglanie

Oto, co się stanie, jeśli ustawimy składnik sekund na wyższą wartość przed przypisaniem go do smalldatetime typ danych.

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:31'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime) AS 'datetime';

Wynik:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:16:00 | 2031-03-25 11:16:00.000 |
+---------------------+-------------------------+

Tak więc składnik minut jest teraz zaokrąglany w górę do następnej minuty.

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

To jest to samo, co w pierwszym przykładzie, z tą różnicą, że tym razem używam metody CONVERT() funkcja zamiast CAST() .

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CONVERT(datetime, @thesmalldatetime) AS 'datetime';

Wynik:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Przykład 4 – Konwersja niejawna

Oto przykład zrobienia tego samego, ale przy użyciu niejawnej konwersji typu.

DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SET @thedatetime = @thesmalldatetime
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  @thedatetime AS 'datetime';

Wynik:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Tak więc otrzymujemy ten sam wynik, niezależnie od tego, czy jest to konwersja jawna czy niejawna.

Jest to niejawna konwersja, ponieważ nie używamy funkcji konwersji do jawnej konwersji. Po prostu przypisujemy wartość ze zmiennej jednego typu danych do zmiennej o innym typie danych. W takim przypadku SQL Server wykonuje niejawną konwersję za kulisami, gdy próbujemy przypisać smalldatetime wartość na data i godzina zmienna.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego dostrajanie wydajności SQL jest najważniejszą umiejętnością zarządzania bazą danych?

  2. Jak podzielić ciąg i wstawić wartości do tabeli w SQL Server

  3. Funkcja podziału w SQL Server 2008

  4. SQL Server Wyrażenia regularne w T-SQL

  5. Pobieranie wyniku dynamicznego SQL do zmiennej dla serwera sql