- 07/22/2017
- 4 minuty na przeczytanie
-
- M
- j
- c
- M
- m
-
+4
.
Dotyczy: SQL Server (wszystkie obsługiwane wersje) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Parallel Data Warehouse
Definiuje datę, która jest połączona z czasem dnia. Czas jest oparty na 24-godzinnym dniu, z sekundami zawsze zerowymi (:00) i bez sekund ułamkowych.
Uwaga
Używaj typów danych time, date, datetime2 i datetimeoffset do nowych prac. Typy te są zgodne z normą SQL. Są one bardziej przenośne. time, datetime2 i datetimeoffset zapewniają większą precyzję sekundową. datetimeoffset zapewnia obsługę stref czasowych dla aplikacji rozmieszczonych globalnie.
CREATE TABLE Table1 ( Column1 smalldatetime )
(used for down-level client)
January 1, 1900, through 6 June 6, 2079
2007-05-09 23:59:59 zostanie zaokrąglone do
2007-05-10 00:00:00
MM to dwie cyfry, z zakresu od 01 do 12, reprezentujące miesiąc w określonym roku.
DD to dwie cyfry, z zakresu od 01 do 31 w zależności od miesiąca, reprezentujące dzień określonego miesiąca.
hh to dwie cyfry, z zakresu od 00 do 23, reprezentujące godzinę.
mm to dwie cyfry, z zakresu od 00 do 59, reprezentujące minutę.
ss to dwie cyfry, z zakresu od 00 do 59, reprezentujące sekundę. Wartości, które wynoszą 29,998 sekundy lub mniej, są zaokrąglane w dół do najbliższej minuty. Wartości 29,999 sekund lub większe są zaokrąglane w górę do najbliższej minuty.
(Nie obejmuje pełnego zakresu lat.)
ANSI and ISO 8601 Compliance
smalldatetime isn’t ANSI or ISO 8601 compliant.
Konwersja danych daty i czasu
Gdy konwertujesz do typów danych daty i czasu, SQL Server odrzuca wszystkie wartości, których nie może rozpoznać jako daty lub czasu. Aby uzyskać informacje na temat używania funkcji CAST i CONVERT z danymi daty i czasu, zobacz CAST i CONVERT (Transact-SQL).
Konwersja smalldatetime do innych typów daty i czasu
Ta sekcja opisuje, co się dzieje, gdy typ danych smalldatetime jest konwertowany do innych typów danych daty i czasu.
W przypadku konwersji na datę, rok, miesiąc i dzień są kopiowane. Poniższy kod pokazuje wyniki konwersji wartości smalldatetime
na wartość date
.
DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10'; DECLARE @date date = @smalldatetime SELECT @smalldatetime AS '@smalldatetime', @date AS 'date'; --Result --@smalldatetime date ------------------------- ---------- --1955-12-13 12:43:00 1955-12-13 -- --(1 row(s) affected)
Gdy konwersja jest na time(n), kopiowane są godziny, minuty i sekundy. Sekundy ułamkowe są ustawiane na 0. Poniższy kod pokazuje wyniki konwersji wartości smalldatetime
na wartość time(4)
.
DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10'; DECLARE @time time(4) = @smalldatetime; SELECT @smalldatetime AS '@smalldatetime', @time AS 'time'; --Result --@smalldatetime time ------------------------- ------------- --1955-12-13 12:43:00 12:43:00.0000 -- --(1 row(s) affected)
Gdy konwersja jest na datetime, wartość smalldatetime jest kopiowana do wartości datetime. Sekundy ułamkowe są ustawione na 0. Poniższy kod pokazuje wyniki konwersji wartości smalldatetime
na wartość datetime
.
DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10'; DECLARE @datetime datetime = @smalldatetime; SELECT @smalldatetime AS '@smalldatetime', @datetime AS 'datetime'; --Result --@smalldatetime datetime ------------------------- ----------------------- --1955-12-13 12:43:00 1955-12-13 12:43:00.000 -- --(1 row(s) affected)
W przypadku konwersji na datetimeoffset(n), wartość smalldatetime jest kopiowana do wartości datetimeoffset(n). Sekundy ułamkowe są ustawione na 0, a przesunięcie strefy czasowej jest ustawione na +00:0. Poniższy kod pokazuje wyniki konwersji wartości smalldatetime
na wartość datetimeoffset(4)
.
DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10'; DECLARE @datetimeoffset datetimeoffset(4) = @smalldatetime; SELECT @smalldatetime AS '@smalldatetime', @datetimeoffset AS 'datetimeoffset(4)'; --Result --@smalldatetime datetimeoffset(4) ------------------------- ------------------------------ --1955-12-13 12:43:00 1955-12-13 12:43:00.0000 +00:0 -- --(1 row(s) affected)
W przypadku konwersji na datetime2(n), wartość smalldatetime jest kopiowana do wartości datetime2(n). Sekundy ułamkowe są ustawiane na 0. Poniższy kod pokazuje wyniki konwersji wartości smalldatetime
na wartość datetime2(4)
.
DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10'; DECLARE @datetime2 datetime2(4) = @smalldatetime; SELECT @smalldatetime AS '@smalldatetime', @datetime2 AS ' datetime2(4)'; --Result --@smalldatetime datetime2(4) ------------------------- ------------------------ --1955-12-13 12:43:00 1955-12-13 12:43:00.0000 -- --(1 row(s) affected)
Przykłady
A. Casting literałów łańcuchowych z sekundami do smalldatetime
Następujący przykład porównuje konwersję sekund w literałach łańcuchowych do wartości smalldatetime
.
SELECT CAST('2007-05-08 12:35:29' AS smalldatetime) ,CAST('2007-05-08 12:35:30' AS smalldatetime) ,CAST('2007-05-08 12:59:59.998' AS smalldatetime);
Wejście | Wyjście |
---|---|
2007-05-08 12:35:29 | 2007-05-08 12:35:00 |
2007-05-08 12:35:30 | 2007-05-08 12:36:00 |
2007-05-08 12:59:59.998 | 2007-05-08 13:00:00 |
B. Porównywanie typów danych daty i czasu
Następujący przykład porównuje wyniki rzutowania ciągu znaków na każdy typ danych daty i czasu.
SELECT CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time' ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date' ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS 'smalldatetime' ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime' ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS 'datetime2' ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 'datetimeoffset';
.