Data i czas danych

W poniższych sekcjach w tym temacie przedstawiono informacje i przykłady na podstawie data i czas typów danych i funkcji.Przegląd wszystkich Transact-SQL Data i czas typów danych i funkcji, zobacz Funkcje daty i godziny (Transact-SQL).

  • Za pomocą operatorów z datą i typy danych czasu

  • Za pomocą formaty daty i godziny

  • Ciąg formaty literał daty i godziny

  • Format ciągu nierozdzielone

  • ISO 8601 Format

  • Alfabetyczne formaty daty

  • Formaty liczbowe daty

  • Formaty czasu

  • ODBC Data -czas Format

  • Konwertowanie data, czas, dataczas2, a dataczasprzesunięcia

  • Konwersja między literały ciągów znaków i czas(n), data, datetime2(n) i datetimeoffset(n)

  • Konwersja między Data i godzina typów danych

  • Za pomocą ODDANYCH i PRZEKONWERTOWAĆ z czas, data, dataczas2, a dataczasprzesunięcia

  • Argumenty styl Functionq konwersji

  • SQL Server Data i godzina ograniczenia

  • Zgodności ze starszymi wersjami klientów niskiego poziom

  • Przykłady

Za pomocą operatorów z datą i typy danych czasu

The relational operators (<, <=, >, >=, <>), comparison operators (=, <, <=, >, >=, <>, !<, !>) i operatorów logicznych i predykaty logiczna (IS NULL jest nie NULL, W, między EXISTS, nie ISTNIEJE i jak) są obsługiwane przez wszystkie data i czas typów danych.

Data i godzina operatory arytmetyczne

Dodawanie i odejmowanie dla wszystkich dat i czas typy danych, użyjDATEADD i DATEDIFF.

Za pomocą formaty daty i godziny

Formaty literału ciągu wpływają na prezentacji danych w aplikacji użytkownikom, ale nie podstawowej całkowitą formatu w SQL Server.Jednakże SQL Server może zinterpretować wartość daty w formacie literalnym ciąg, wejścia przez aplikację lub użytkownika do składowania lub funkcja Data, jak różne daty.Interpretacja zależy od kombinacji formacie literalnym ciąg, typ danych i wykonywania USTAWIĆ format daty, Ustaw język i język domyślny opcji ustawienia.

Niektóre formaty literał ciąg nie dotyczy tych ustawień.Warto rozważyć format, który nie zależy od tych ustawień, o ile wiadomo, że ustawienia są poprawne dla formatu.The ISO 8601 format does not depend on these settings and is an international standard.Transact-SQL that uses string literal formats, dependent on system settings, is less portable.

Domyślny format literału ciąg dla klientów niskiego poziomu, zobacz temat dla każdej daty i czas typu danych.Przegląd wszystkich Transact-SQL Data i czas typów danych i funkcji, zobacz Funkcje daty i godziny (Transact-SQL).

ydm Format data nie jest obsługiwana dla date, datetime2 i datetimeoffset typów.Uruchom czas błąd będzie uruchamiany.

Ciąg formaty literał daty i godziny

Następujące tabela listy inną data i czas ciąg formatu.Firma Microsoft zaleca użycie data -czas formaty, które nie są zależne od format data i są wielojęzyczne.ISO 8601 formaty "1998-02-23T14:23:05" i "1998-02-23T14:23:05-08: 00" są tylko formaty norma międzynarodowa.Format daty lub domyślny język logowania zależne nie są one i są wielojęzyczne.

Data -czas części

Typ formatu

Przykład formatu

Można łączyć z innymi formatami

Format daty zależne

Wielojęzyczne

Data

UN-Separated

ISO 8601

'19980223'

Tak

Nie

Tak

Data

Liczbowy

'02/23/1998'

Tak

tak

Nie

(FORMAT DATY)

Data

ISO 8601 numeryczne

'1998-02-23'

Tak

Nie

Nie

Data

Alfabetyczne

"23 lutego 1998 r."

Tak

Nie

Nie

(miesiąc lub skróconego miesiąca)

Data

Data ODBC

{d ' 1998-02-23' }

Nie

Nie

Tak

Godzina

ISO 8601 czasu

'14:23:05'

'10:00:00.123456'

Tak

Nie

Tak

Godzina

Czas ODBC

{t "14:23:05" }

Nie

Nie

Tak

Data-czas

ODBC Data-czas

{ts ' 1998-02-23 14: 23: 05 "}

Nie

Nie

Tak

Data-czas

ISO 8601

"1998-02-23T14:23:05"

' 1998-02-23T14:23:05-08: 00'

Nie

Nie

Yes date, datetime2, datetimeoffset.

Data-czas

ANSI SQL Standard

'1998-02-23 14:23:05'

'1998-02-23 14:23:05 -08:00'

Nie

No (datetime2, datetimeoffset)

Yes (datetime)

Yes date, datetime2, datetimeoffset.

Data-czas

Kombinacja data iczas

'19980223 14:23:05'

"02/23/1998 2:23:05 PM"

'1998-02-23 10:00:00.123'

"23 lutego 1998 r. 14: 23: 05"

Nie

Tak

(część data)

Nie

Strefa czasowa

Format strefa czasowa

'+12:00'

'01:00'

'-08:00'

'Z'

Tak

Nie

Tak

Następujące instrukcje wyświetlane efekty ustawienia Ustaw język i Ustaw format daty.

DECLARE @Today date = '12/1/2003';
DECLARE @MyTime time = '12:30:22';
DECLARE @MyDatetimeoffset datetimeoffset = '12/1/2003 12:30:22 -5:00';
SET LANGUAGE Italian
    -- Returns: Changed language setting to Italiano.
SELECT DATENAME(month, @Today) AS 'Month Name';
    -- Returns: dicembre
SELECT CONVERT(VARCHAR(30), @MyDatetimeoffset) AS 'DATETIMEOFFSET';
    -- Returns: dic  1 2003 12:30PM -05:00
SELECT DATENAME(hour, @MyTime) As 'Hour Name';
    -- Returns: 12

SET LANGUAGE us_english;
    -- Returns: Changed language setting to us_english.
SELECT DATENAME(month, @Today) AS 'Month Name';
    -- Returns: December
SELECT CONVERT(VARCHAR(30), @MyDatetimeoffset) AS 'DATETIMEOFFSET';
    -- Returns: Dec  1 2003 12:30PM -05:00
SELECT DATENAME(hour, @MyTime) As 'Hour Name';
    -- Returns: 12
GO
-- Set date format to month, day, year.
SET DATEFORMAT mdy;
GO
DECLARE @datevar date = '12/31/1998';
SELECT @datevar AS DateVar;
    -- Returns: 1998-12-31
GO
-- Set date format to year, day, month. 
SET DATEFORMAT ydm;
GO
DECLARE @datevar datetimeoffset = '1998/31/12 12:30:22 -05:00';
SELECT @datevar AS DateVar;
    -- Returns: Msg 241, Conversion failed when converting 
    -- date and/or time from character string.
GO
-- Set date format to year, month, day.
SET DATEFORMAT ymd;
GO
DECLARE @datevar date = '12/31/1998';
SELECT @datevar AS DateVar;
    -- Returns: 1998-12-31
GO

Format ciągu nierozdzielone

Danych data można określić jako ciąg nierozdzielone.Danych data można określić przy użyciu czterech, sześciu lub osiem cyfr ciąg pusty lub czas wartości bez wartości data.

Ustawienie sesja USTAWIĆ format data nie dotyczą wpisy liczbowe wszystkie data, takie jak wartości liczbowych bez separatorów.Ciągi sześciocyfrowy lub ośmiocyfrowy są zawsze interpretowane jako ymd.Miesiąc i dzień musi być zawsze dwie cyfry.

Jest to format prawidłowy ciąg un-separated: [19]960415

Ciąg tylko czterech cyfr jest interpretowana jako rok.Miesiąc i dzień są zestaw do 1 stycznia.Po określeniu tylko czterech cyfr musi zawierać stulecia.

ISO 8601 Format

data ISO 8601 z czas format jest następujący:

  • YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]

  • YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC, Coordinated Universal Time)

t wskazuje czas część wartości data i godziny rozpoczęcia.

Aby użyć formatu ISO 8601, należy określić każdy element w formacie.Obejmuje to t, dwukropek (:), + lub - i kropek (.).Nawiasy kwadratowe wskazują, że ułamków sekund lub czas składniki przesunięcia strefy są opcjonalne.

czas Składnika jest określony w formacie 24-godzinnym.

Korzyści w formacie ISO 8601 to jest norma międzynarodowa.Data i czas wartości, które są określone za pomocą tego formatu są jednoznaczne.Format ten nie dotyczy zestawu FORMATDATY Ustaw język logowania język domyślny ustawienia.

Oto dwa przykłady data-czas wartości, które są określone w formacie ISO 8601:

  • 2004-05-23T14:25:10

  • 2004-05-23T14:25:10.1234567 + 07: 00

Alfabetyczne formaty daty

Można określić miesiąc jako nazwę, na przykład kwietnia lub skrót nazwy kwi w języku angielskim.Te powinny być określone w język sesja, na przykład avril lub avr w języku francuskim.Przecinki są opcjonalne i wielkość liter jest ignorowana.

Poniżej przedstawiono wskazówki dotyczące używania formatów data alfabetycznej:

  • Ujęta data i czas danych w pojedynczym cudzysłowie (').

  • Jeśli określisz tylko dwie ostatnie cyfry roku, mniej niż dwie ostatnie cyfry wartość wartości dwie cyfry roku odcięcia opcja konfiguracja są w tym samym wieku jako rok odcięcia.Wartości, które są większe niż lub równa wartości tej opcji są w wieku dostarczoną przed rokiem odcięcia.Na przykład jeśli two digit year cutoff jest 2050 (domyślnie), 25 jest interpretowana jako 2025 i 50 jest interpretowana jako 1950.Aby uniknąć niejednoznaczności, Użyj czterocyfrowego roku.

  • Jeśli brakuje dzień pierwszy dzień miesiąca jest dostarczany.

  • Ustawienie sesja USTAWIĆ format daty nie jest stosowana po określeniu miesiąca w formie alfabetycznej.

  • Następujące formaty są prawidłowe formaty alfabetycznej dla SQL Server danych Data. Znaki, które są ujęte w nawiasy są opcjonalne. 

  • Kwi [il] [15] [,] 1996 r.

  • Kwi [il] 15 [,] [19] 96

  • Kwi [il] 1996 [15]

  • [15] Kwi [il] [,] 1996 r.

  • 15 Kwietnia [il] [,] [19] 96

  • 15 [19] 96 kwi [il]

  • [15] kwietnia 1996 r. [il]

  • KWI 1996 [IL] [15]

  • KWIETNIA 1996 R. [15] [IL]

Formaty liczbowe daty

Dane data można określić z miesiąca numeryczne.Na przykład 20/5/97 reprezentuje dwudziestego maja 1997 r.W przypadku formatu liczbowego Data określić rok, miesiąc i dzień, w ciąg z kreski ułamkowej (/), łączniki (-) i kropki (.) jako separatory.Ten ciąg musi pojawić się w następującej formie:

number separator number separator number [time] [time]

Prawidłowe są następujące formaty liczbowe:

  • [0] 4 i 15 / [19] 96--(mdy)

  • [0] 4 - 15-[19] 96--(mdy)

  • 4.15 [0].96 [19]--(mdy)

  • 4 [0] / [19] 96/15--(myd)

  • 15 / [0] 4 / [19] 96--(dmy)

  • 15 / [19] 96 / [0] 4--(dym)

  • [19], 96/15 / [0] 4 – (ydm)

  • [19], 96 / [0] 4/15--(ymd)

Język domyślny format daty dla sesja jest zestaw przez domyślny język dla logowania, zestaw instrukcja języka lub zestaw instrukcja format daty.Gdy język jest zestaw do us_english przez logowanie domyślne lub zestaw instrukcja języka domyślnego porządku dnia jest mdy.

Można zmienić kolejność dat przy użyciu instrukcja USTAWIĆ format data.Ustawienie USTAWIĆ format data określa interpretowania wartości data.Kolejność niezgodna ustawienie wartości nie są interpretowane jako daty, ponieważ są one z zakres lub wartości są błędnie zinterpretowana.Na przykład 10-12/08 mogą być interpretowane jako jeden z sześciu dat, w zależności od ustawień Format daty.Czterocyfrowy rok będzie interpretowana jako rok.

Formaty czasu

SQL Serverrozpoznaje następujące formaty czas danych.Należy umieścić każdy format w pojedynczy cudzysłów (').

  • 14:30

  • 14:30[:20:999]

  • 14:30[:20.9]

  • 04:00:00 AM

  • 16:00:00 AM

  • JESTEM 4 [0] [:30:20:500]

Następujące instrukcje przedstawiają wartości zwrotu nakładów różnych funkcja ODDANYCH.

SELECT CAST('01/01/2000 14:30' AS datetime2)
    --Returns: 2000-01-01 14:30:00.0000000
SELECT CAST('01/01/2000 14:30:20:999' AS datetime2)
    -- Returns: 2000-01-01 14:30:20.9990000
SELECT CAST('01/01/2000 14:30:20.9' AS datetime2)
    -- Returns: 2000-01-01 14:30:20.9000000
SELECT CAST('01/01/2000 4am' AS datetime2)
    -- Returns: 2000-01-01 04:00:00.0000000
SELECT CAST('01/01/2000 4 PM' AS datetime2)
    -- Returns: 2000-01-01 16:00:00.0000000
SELECT CAST('01/01/2000 04:30:20:500AM' AS datetime2)
    -- Returns: 2000-01-01 04:30:20.5000000
SELECT CAST('01/01/2000 04:30:20:500 AM' AS datetime2)
    -- Returns: 2000-01-01 04:30:20.5000000
GO

Można określić sufiks AM lub PM, wskazując, jeśli czas wartość jest przed lub po godzinie 12.00 w południe.Przypadek AM lub PM jest ignorowana.

Godziny można określić przy użyciu zegara 12-godzinnym lub 24-godzinnym.Wartości godziny są interpretowane następująco.

  • Wartość godziny 00 reprezentuje godzinę po północy (AM), niezależnie od tego, czy określić AM.Nie można określić, kiedy godzinę jest równa 00 PM.

  • Godziny od 01 do 11 reprezentują godzin przedpołudniowych, gdy AM i PM nie jest określone.Reprezentują godzin przedpołudniowych, gdy AM jest określony.Stanowią one godzin popołudniowych, jeśli określono PM.

  • Wartość godziny 12 reprezentuje godzinę, który uruchamia w południe, jeśli AM i PM nie jest określone.Jeśli AM określono reprezentuje godzinę rozpoczyna się od północy.Jeśli określono PM reprezentuje godzinę rozpoczęcia w południe.Na przykład: 12: 01 jest 1 minuta popołudniowych, jest 12:01 PM, podczas gdy 12:01 AM to 1 minuta po północy.Określanie 12:01 AM jest taka sama, jak określanie 00: 01 lub 00:01.

  • Wartości godzin od 13 do 23 reprezentuje godzin popołudniowych, jeżeli nie określono AM lub PM.Stanowią one również godzin popołudniowych, gdy określono PM.Nie można określić AM, gdy jest wartość godziny od 13 do 23.

  • Wartość godziny 24 jest nieprawidłowy; Służy do reprezentowania północy 12:00 AM lub 00: 00.

Milisekund mogą być poprzedzone dwukropka (:) lub kropki (.).Jeśli jest poprzedzony dwukropek, numer oznacza tysięcznych z drugiego.Poprzedzoną kropką, pojedyncza cyfra oznacza dziesiątych z drugiego, dwie cyfry oznaczają setnych z drugiego i trzy cyfry oznaczają tysięcznych z drugiego.Na przykład 12:30:20:1 oznacza dwudziestu i jedną tysięczną sekund w przeszłości 12: 30; 12:30:20.1 wskazuje dwudziestu i jednej dziesiątej sekundy w przeszłości 12: 30.

ODBC Data -czas Format

Interfejsu API ODBC definiuje sekwencje unikowe reprezentująca datę i czas wartości przez ODBC wywołuje czassygnatury danych.Ten format sygnatury czasowej ODBC jest również obsługiwana przez OLE DB definition language (DBGUID-SQL) i Microsoft OLE DB dostawca for SQL Server.Aplikacje korzystające z interfejsu ADO, OLE DB i interfejsów API opartego na ODBC można użyć ten format sygnatury czasowej ODBC do reprezentowania daty i godziny.

SQL Serverzawsze traktuje danych ODBC jako datetime typu danych.

Sekwencje unikowe ODBC sygnatury czasowej są formatu:

{ literal_type 'constant_value' }

  • literal_type
    Określa typ sekwencji unikowej.Oto prawidłowe argumenty literal_type.

    d = tylko data

    t = czas only

    TS = czaspieczęć (czas + Data)

  • 'constant_value'
    Is the value of the escape sequence.constant_value must follow these formats for each literal_type.

    literal_type

    constant_value format

    d

    RRRR MM-DD

    t

    hh:mm:ss.fff

    TS

    YYYY-MM-DDhh:mm:ss[.fff]

Przykłady ODBC czas i daty są następujące:

  • {ts ' 1998-05-02 01:23:56.123 " }

  • {d ' 1990-10-02' }

  • {t "13:33:41" }

Do not confuse the ODBC and OLE DB timestamp data type name with the Transact-SQL timestamp data type name.Typ danych timestamp ODBC i OLE DB rekordy daty i godziny.The Transact-SQL timestamp data type is a binary data type that has no time-related values.

Konwertowanie data, czas, dataczas2, a dataczasprzesunięcia

Istnieją dwa rodzaje konwersje między typami innej data: bezpośrednie i pośrednie.Konwersje niejawne wystąpić bez korzystania z funkcji RZUTOWANIA lub konwersji.Konwersje jawne wymagają funkcji RZUTOWANIA lub konwersji.

Konwersja między literały ciągów znaków i czas(n), data, datetime2(n) i datetimeoffset(n)

Konwersje z literały ciągów znaków do data i czas typy są dopuszczalne, jeżeli wszystkie części ciągi są prawidłowe formaty.W przeciwnym razie powstaje błąd w czasie wykonywania.

Konwersje niejawne lub Konwersje jawne, które nie określają styl, z datą i czas typów literały ciągów znaków będzie domyślny format bieżącej sesja.

Niejawna konwersja z data, czas, datetime2 i datetimeoffset typów danych ciągów znaków, standardowego formatu SQL YYY-MM-DD hh:mi:ss. [nnnnnnn], PRZEKONWERTUJ styl 121, będą stosowane.Konwertowanie stylów 0 format, mon dd rrrr hh:miAM (lub PM), jest stosowany dla danych typu Data/Godzina i smalldatetime.

W poniższej tabela przedstawiono zasady konwersji między date, time, datetime2 i datetimeoffset typy i Literały ciąg.

Literał ciąg wejściowego

date

time(n)

datetime2(n)

datetimeoffset(n)

DATA ODBC

Patrz przypis 1.

Patrz przypis 1.

Patrz przypis 1.

Patrz przypis 1.

CZAS ODBC

Patrz przypis 1.

Patrz przypis 1.

Patrz przypis 1.

Patrz przypis 1.

ODBC DATETIME

Patrz przypis 1.

Patrz przypis 1.

Patrz przypis 1.

Patrz przypis 1.

Tylko data

Uproszczony

Wartości domyślne są dostarczane.

Domyślnie część godzina 00: 00: 00.

Domyślnie część godzina 00: 00: 00.Domyślna strefa CZASOWA + 00: 00.

Tylko raz

Wartości domyślne są dostarczane.

Uproszczony

Domyślnie część daty 1900-1-1.

Domyślnie część daty 1900-1-1.Domyślnie strefa CZASOWA + 00: 00.

Tylko strefa CZASOWA

Wartości domyślne są dostarczane.

Wartości domyślne są dostarczane.

Wartości domyślne są dostarczane.

Wartości domyślne są dostarczane.

DATA + CZAS

Część daty ciąg wejściowy jest używany.

Część czasu ciąg wejściowy jest używany.

Uproszczony

Domyślna strefa CZASOWA + 00: 00.

DATA + STREFA CZASOWA

Niedozwolone

Niedozwolone

Niedozwolone

Niedozwolone

CZAS + STREFA CZASOWA

Wartości domyślne są dostarczane.

Część czasu ciąg wejściowy jest używany.

Domyślnie część daty 1900-1-1.Strefa CZASOWA wprowadzania jest ignorowana.

Domyślnie część daty 1900-1-1.

DATA, GODZINA + STREFA CZASOWA

Część datę DATETIME lokalne będą używane.

Część czasu lokalnego DATETIME będą używane.

DATETIME lokalne będą używane.

Uproszczony

Konwersja notatek

  1. ODBC ciąg literały są mapowane na datetime typu danych.Operacje przypisania z literały ODBC DATETIME do date, time, datetime2, lub datetimeoffset typów spowoduje niejawna konwersja między datetime i te typy zdefiniowane przez zasady konwersji.

  2. Dokładność ułamków sekund datetime ma dokładność trzy-setnych sekundy (odpowiednik 3.33 milisekund lub 0.00333 sekund).Wartości są zaokrąglane do wielokrotności sekund.000,.003 lub.007. '22/08/1995 10:15:19:999 " zaokrąglone, ponieważ '. 999 " przekracza dokładność.

  3. Dla time(3), datetime2(3) lub datetimeoffset(3), precision ułamków sekund ma dokładność jednej milisekundy.Dlatego "1995-8-22 10:15:19:999" nie zostanie zaokrąglona.

  4. Wprowadzania TIMEZONE offset części powinny być zawsze podwójne cyfr hh i mm.Znak, albo + lub –, jest obowiązkowe.

Konwersja między Data i godzina typów danych

Tabele w tej sekcji opisano, jak każdy następujące data i czas typów danych jest konwertowana na inną datę i czas typów danych:

  • date

  • time(n)

  • datetime

  • smalldatetime

  • datetimeoffset(n)

  • datetime2

Data, typ danych

W poniższej tabela opisano, jakie występuje po date Typ danych jest konwertowana na inną datę i czas typów danych.

Typ danych, aby przekonwertować

Szczegóły konwersji

time(n)

Konwersja nie powiedzie się, a komunikat o błędzie 206 jest wywoływane: "Clash typ operandu: Data jest zgodna z czas".

datetime

Data jest kopiowana.Poniższy kod przedstawia wyniki konwersji date wartość datetime wartości.

DECLARE @date date;
DECLARE @datetime datetime;
SET @date = '12-10-25';
SET @datetime = @date;
SELECT @date AS '@date', @datetime AS '@datetime';
--Result
--@date      @datetime
------------ -----------------------
--2025-12-10 2025-12-10 00:00:00.000
--
--(1 row(s) affected)

smalldatetime

Po date wartość z zakres od smalldateczas, data, składnik jest kopiowany i czas składnik jest ustawiona na 00:00:00.000.Gdy date wartość jest spoza zakres smalldatetime podnieść wartość komunikat o błędzie 242: "Konwersja typu danych Data smalldatetime typ danych spowodowało wartość poza zakresem.";i smalldatetime wartość jest zestaw na NULL.

Poniższy kod przedstawia wyniki konwersji date wartość smalldatetime wartości.

DECLARE @date date;
DECLARE @smalldatetime smalldatetime;
SET @date = '1912-10-25';
SET @smalldatetime = @date;
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';
--Result
--@date      @smalldatetime
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00
--
--(1 row(s) affected)

datetimeoffset(n)

Data jest kopiowana, a czas jest zestaw 00:00.0000000 + 00: 00.

Poniższy kod przedstawia wyniki konwersji date wartość datetimeoffset(3) wartości.

DECLARE @date date;
DECLARE @datetimeoffset datetimeoffset(3);
SET @date = '1912-10-25';
SET @datetimeoffset = @date;
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';
--Result
--@date      @datetimeoffset
------------ ------------------------------
--1912-10-25 1912-10-25 00:00:00.000 +00:00
--
--(1 row(s) affected)

datetime2(n)

Składnik data jest kopiowana, a czas składnik jest ustawiona na 00:00.000000.

Poniższy kod przedstawia wyniki konwersji date wartość datetime2(3) wartości.

DECLARE @date dat;e
DECLARE @datetime2 datetime2(3);
SET @date = '1912-10-25';
SET @datetime2 = @date;
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';
--Result
--@date      @datetime2(3)
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00.000
--
--(1 row(s) affected)

czas(n) typ danych

W poniższej tabela opisano, jakie występuje po time Typ danych jest konwertowana na inną datę i czas typów danych.

Typ danych, aby przekonwertować

Szczegóły konwersji

time(n)

Kopiowane są godziny, minuty i sekundy.Kiedy precision obiekt docelowy jest mniejsza niż precision źródło, ułamków sekund zostanie obcięty do dopasowanie precision docelowego.

Poniższy przykład przedstawia wyniki konwersji time(4) wartość time(3) wartości.

DECLARE @timeTo time(3);
DECLARE @timeFrom time(4);
SET @timeFrom = '12:34:54.1234';
SET @timeTo = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
--Results
--time(3)      time(4)
-------------- -------------
--12:34:54.123 12:34:54.1234
--
--(1 row(s) affected)

date

Konwersja nie powiedzie się, a komunikat o błędzie 206 jest wywoływane: "Clash typ operandu: Data jest zgodna z czas".

datetime

Godzinę, minutę i drugiej wartości są kopiowane; Składnik data jest zestaw do "1900-01-01".Gdy dokładność ułamków sekund time(n) wartość jest większa niż trzy cyfry, datetime wynik zostanie obcięty.

Poniższy kod przedstawia wyniki konwersji time(4) wartość datetime wartości.

DECLARE @time time(4);
DECLARE @datetime datetime;
SET @time = '12:15:04.1234';
SET @datetime = @time;
SELECT @time AS '@time', @datetime AS '@datetime';
--Result
--@time         @datetime
--------------- -----------------------
--12:15:04.1234 1900-01-01 12:15:04.123
--
--(1 row(s) affected)

smalldatetime

Data jest zestaw "1900-01-01' i wartości godziny i minuty są kopiowane.Sekund i ułamków sekund są zestaw na 0.

Poniższy kod przedstawia wyniki konwersji time(4) wartość smalldatetime wartości.

DECLARE @time time(4);
DECLARE @smalldatetime smalldatetime;
SET @time = '12:15:04.1234';
SET @smalldatetime = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
--Result
--@time         @smalldatetime
--------------- -----------------------
--12:15:04.1234 1900-01-01 12:15:00
--
--(1 row(s) affected)

datetimeoffset(n)

Data jest zestaw "1900-01-01' i czas jest kopiowany.czas Ustawiono przesunięcie strefy + 00: 00.Gdy dokładność ułamków sekund time(n) wartość jest większa dokładność datetimeoffset(n) wartość jest obcinana do dopasowanie.

Poniższy przykład przedstawia wyniki konwersji time(4) wartość datetimeoffset(3) typu.

DECLARE @time time(4);
DECLARE @datetimeoffset datetimeoffset(3);
SET @time = '12:15:04.1234';
SET @datetimeoffset = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
--Result
--@time         @datetimeoffset
--------------- ------------------------------
--12:15:04.1234 1900-01-01 12:15:04.123 +00:00
--
--(1 row(s) affected)

datetime2(n)

Data jest zestaw "1900-01-01", czas składnika jest kopiowany i strefę czasową, pozazestaw jest zestaw do 00: 00.Gdy dokładność ułamków sekund datetime2(n) jest większa niż wartość time(n) wartość, wartość zostanie obcięta do dopasowanie.

Poniższy przykład przedstawia wyniki konwersji time(4) wartość datetime2(2) wartości.

DECLARE @time time(4);
DECLARE @datetime2 datetime2(3);
SET @time = '12:15:04.1234';
SET @datetime2 = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
--Result
--@datetime2              @time
------------------------- -------------
--1900-01-01 12:15:04.123 12:15:04.1234
--
--(1 row(s) affected)

Typ danych Data/Godzina

W poniższej tabela opisano, jakie występuje po datetime Typ danych jest konwertowana na inną datę i czas typów danych.

Typ danych, aby przekonwertować

Szczegóły konwersji

date

Rok, miesiąc i dzień są kopiowane.czas Składnik jest ustawiona na 00:00:00.000.

Poniższy kod przedstawia wyniki konwersji date wartość datetime wartości.

DECLARE @date date;
DECLARE @datetime datetime;
SET @date = '12-21-05';
SET @datetime = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
--Result
--@datetime               @date
------------------------- ----------
--2005-12-21 00:00:00.000 2005-12-21

time(n)

czas Skopiować składnik i składnik data jest ustawiony na "1900-01-01".Gdy dokładność ułamkową time(n) wartość większa niż trzy cyfry, wartość zostanie obcięta do dopasowanie.

Poniższy przykład przedstawia wyniki konwersji time(4) wartość datetime wartości.

DECLARE @time time(4);
DECLARE @datetime datetime;
SET @time = '12:10:05.1234';
SET @datetime = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
--Result
--@datetime               @time
------------------------- -------------
--1900-01-01 12:10:05.123 12:10:05.1234
--
--(1 row(s) affected)

smalldatetime

Godziny i minuty są kopiowane.Sekund i ułamków sekund są zestaw na 0.

Poniższy kod przedstawia wyniki konwersji smalldatetime wartość datetime wartości.

DECLARE @smalldatetime smalldatetime;
DECLARE @datetime datetime;
SET @smalldatetime = '12-01-01 12:32';
SET @datetime = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
--Result
--@datetime               @smalldatetime
------------------------- -----------------------
--2001-12-01 12:32:00.000 2001-12-01 12:32:00
--
--(1 row(s) affected)

datetimeoffset(n)

Data i czas składniki są kopiowane.czas Strefy jest obcinana.Gdy dokładność ułamkową datetimeoffset(n) jest większa niż trzy cyfry, wartość zostanie obcięta.

Poniższy przykład przedstawia wyniki konwersji datetimeoffset(4) wartość datetime wartości.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @datetime datetime;
SET @datetimeoffset = '1968-10-23 12:45:37.1234 +10:0';
SET @datetime = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
--Result
--@datetime               @datetimeoffset
------------------------- ------------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1234 +01:0
--
--(1 row(s) affected)

datetime2(n)

Data i czas są kopiowane.Gdy dokładność ułamkową datetime2(n) jest większa niż trzy cyfry, wartość zostanie obcięta.

Poniższy przykład przedstawia wyniki konwersji datetime2(4) wartość datetime wartości.

DECLARE @datetime2 datetime2(4);
DECLARE @datetime datetime;
SET @datetime2 = '1968-10-23 12:45:37.1237';
SET @datetime = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
--Result
--@datetime               @datetime2
------------------------- ------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
--
--(1 row(s) affected)

smalldatetime typ danych

W poniższej tabela opisano, jakie występuje po smalldatetime Typ danych jest konwertowana na inną datę i czas typów danych.

Typ danych, aby przekonwertować

Szczegóły konwersji

date

Rok, miesiąc i dzień są kopiowane.

Poniższy kod przedstawia wyniki konwersji smalldatetime wartość date wartości.

DECLARE @smalldatetime smalldatetime;
DECLARE @date dat;e
SET @smalldatetime = '1955-12-13 12:43:10';
SET @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)

time(n)

Kopiowane są godziny, minuty i sekundy.Ułamków sekund są zestaw na 0.

Poniższy kod przedstawia wyniki konwersji smalldatetime wartość time(4) wartości.

DECLARE @smalldatetime smalldatetime;
DECLARE @time time(4);
SET @smalldatetime = '1955-12-13 12:43:10';
SET @time = @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)

datetime

smalldatetime Wartość jest kopiowana do datetime wartości.Ułamków sekund są zestaw na 0.

Poniższy kod przedstawia wyniki konwersji smalldatetime wartość datetime wartości.

DECLARE @smalldatetime smalldatetime;
DECLARE @datetime datetime;
SET @smalldatetime = '1955-12-13 12:43:10';
SET @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)

datetimeoffset(n)

smalldatetime Wartość jest kopiowana do datetimeoffset(n) wartości.Ułamków sekund są ustawione na 0 i czas przesunięcie strefy jest ustawiony do + 00: 0.

Poniższy kod przedstawia wyniki konwersji smalldatetime wartość datetimeoffset(4) wartości.

DECLARE @smalldatetime smalldatetime;
DECLARE @datetimeoffset datetimeoffset(4);
SET @smalldatetime = '1955-12-13 12:43:10';
SET @datetimeoffset = @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)

datetime2(n)

smalldatetime Wartość jest kopiowana do datetime2(n) wartości.Ułamków sekund są zestaw na 0.

Poniższy kod przedstawia wyniki konwersji smalldatetime wartość datetime2(4) wartości.

DECLARE @smalldatetime smalldatetime;
DECLARE @datetime2 datetime2(4);
SET @smalldatetime = '1955-12-13 12:43:10';
SET @datetime2 = @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)

datetimeoffset(n) typ danych

W poniższej tabela opisano, jakie występuje po datetimeoffset(n) Typ danych jest konwertowana na inną datę i czas typów danych.

Typ danych, aby przekonwertować

Szczegóły konwersji

date

Rok, miesiąc i dzień są kopiowane.

Poniższy kod przedstawia wyniki konwersji datetimeoffset(4) wartość date wartości.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @date date;
SET @datetimeoffset = '12-10-25 12:32:10 +01:0;
SET @date = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset ', @date AS 'date';
--Result
--@datetimeoffset                date
-------------------------------- ----------
--2025-12-10 12:32:10.0000 +01:0 2025-12-10
--
--(1 row(s) affected)

time(n)

Godzina, minuty, sekundy i ułamków sekund są kopiowane.czas Strefy wartość jest obcinana.Gdy dokładność datetimeoffset(n) wartość jest większa dokładność time(n) wartość zostanie obcięta.

Poniższy kod przedstawia wyniki konwersji datetimeoffset(4) wartość time(3) wartości.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @time time(3);
SET @datetimeoffset = '12-10-25 12:32:10.1234 +01:0';
SET @time = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset ', @time AS 'time';
--Result
--@datetimeoffset                time
-------------------------------- ------------
--2025-12-10 12:32:10.1234 +01:0 12:32:10.123
--
--(1 row(s) affected)

datetime

Data i czas wartości są kopiowane oraz czas strefy jest obcinana.Gdy dokładność ułamkową datetimeoffset(n) jest większa niż trzy cyfry, wartość zostanie obcięta.

Poniższy kod przedstawia wyniki konwersji datetimeoffset(4) wartość datetime wartości.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @datetime datetime;
SET @datetimeoffset = '12-10-25 12:32:10.1234 +01:0';
SET @datetime = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset ', @datetime AS 'datetime';
--Result
--@datetimeoffset                datetime
-------------------------------- -----------------------
--2025-12-10 12:32:10.1234 +01:0 2025-12-10 12:32:10.123
--
--(1 row(s) affected)

smalldatetime

data, godziny i minuty są kopiowane.Sekund są zestaw na 0.

Poniższy kod przedstawia wyniki konwersji datetimeoffset(3) wartość smalldatetime wartości.

DECLARE @datetimeoffset datetimeoffset(3);
DECLARE @smalldatetime smalldatetime;
SET @datetimeoffset = '1912-10-25 12:24:32 +10:0';
SET @smalldatetime = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset', @smalldatetime AS '@smalldatetime';
--Result
--@datetimeoffset                @smalldatetime
-------------------------------- -----------------------
--1912-10-25 12:24:32.000 +10:00 1912-10-25 12:25:00
--
--(1 row(s) affected)

datetime2(n)

Data i czas są kopiowane do datetime2 wartości oraz czas strefy jest obcinana.Gdy dokładność datetime2(n) wartość jest większa dokładność datetimeoffset(n) wartość ułamków sekund są obcinane do dopasowanie.

Kod wykonaj przedstawia wyniki konwersji datetimeoffset(4) wartość datetime2(3) wartości.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @datetime2 datetime2(3);
SET @datetimeoffset = '1912-10-25 12:24:32.1234 +10:0';
SET @datetime2 = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset', @datetime2 AS '@datetime2';
--Result
--@datetimeoffset                @datetime2
-------------------------------- -----------------------
--1912-10-25 12:24:32.1234 +10:0 1912-10-25 12:24:32.123
--
--(1 row(s) affected)

datetime2 typ danych

W poniższej tabela opisano, jakie występuje po datetime2 Typ danych jest konwertowana na inną datę i czas typów danych.

Typ danych, aby przekonwertować

Szczegóły konwersji

date

Rok, miesiąc i dzień są kopiowane.

Poniższy kod przedstawia wyniki konwersji datetime2(4) wartość date wartości.

DECLARE @datetime2 datetime2(4;
DECLARE @date date;
SET @datetime2 = '12-10-25 12:32:10.1234';
SET @date = @datetime2;
SELECT @datetime2 AS '@datetime2', @date AS 'date';
--Result
--@datetime2               date
-------------------------- ----------
--2025-12-10 12:32:10.1234 2025-12-10
--
--(1 row(s) affected)

time(n)

Godzina, minuty, sekundy i ułamków sekund są kopiowane.

Poniższy kod przedstawia wyniki konwersji datetime2(4) wartość time(3) wartości.

DECLARE @datetime2 datetime2(4);
DECLARE @time time(3);
SET @datetime2 = '12-10-25 12:32:10.1234';
SET @time = @datetime2;
SELECT @datetime2 AS '@datetime2', @time AS 'time(3)';
--Result
--@datetime2                time(3) 
-------------------------- ------------
--2025-12-10 12:32:10.1234 12:32:10.123
--
--(1 row(s) affected)

datetime

Data i czas wartości są kopiowane.Gdy dokładność ułamkową datetimeoffset(n) jest większa niż trzy cyfry, wartość zostanie obcięta.

Poniższy kod przedstawia wyniki konwersji datetime2 wartość datetime wartości.

DECLARE @datetime2 datetime;2
DECLARE @datetime datetime;
SET @datetime2 = '12-10-25 12:32:10.1234567;'
SET @datetime = @datetime2;
SELECT @datetime2 AS '@datetime2', @datetime AS '@datetime';
--Result
--@datetime2                  @datetime
----------------------------- -----------------------
--2025-12-10 12:32:10.1234567 2025-12-10 12:32:10.123
--
--(1 row(s) affected)

smalldatetime

data, godziny i minuty są kopiowane.Sekund są zestaw na 0.

Poniższy kod przedstawia wyniki konwersji datetime2 wartość smalldatetime wartości.

DECLARE @datetime2 datetime2;
DECLARE @smalldatetime smalldatetime;
SET @datetime2 = '12-10-25 12:32:10.1234567';
SET @smalldatetime = @datetime2;
SELECT @datetime2 AS '@datetime2', @smalldatetime AS '@smalldatetime';
--Result
--@datetime2                  @datetime
----------------------------- -----------------------
--2025-12-10 12:32:10.1234567 2025-12-10 12:32:10.123
--
--(1 row(s) affected)

datetimeoffset(n)

smalldatetime Wartość jest kopiowana do datetimeoffset(n) wartości.czas Przesunięcie strefy jest ustawiony do + 00: 0.Gdy dokładność datetime2(n) wartość jest większa dokładność datetimeoffset(n) wartość jest obcinana do dopasowanie.

Poniższy kod przedstawia wyniki konwersji datetime2(5) wartość datetimeoffset(3) wartości.

DECLARE @datetime2 datetime2(3);
DECLARE @datetimeoffset datetimeoffset(2);
SET @datetime2 = '12-10-25 12:32:10.1234567';
SET @datetimeoffset = @datetime2;
SELECT @datetime2 AS '@datetime2', @datetimeoffset AS '@datetimeoffset(2)';
--Result
--@datetime2              @datetimeoffset(2)
------------------------- -----------------------------
--2025-12-10 12:32:10.123 2025-12-10 12:32:10.12 +00:00
--
--(1 row(s) affected)

Za pomocą ODDANYCH i PRZEKONWERTOWAĆ z czas, data, dataczas2, a dataczasprzesunięcia

Ta sekcja zawiera informacje dotyczące konwersji między datą i czas typów danych.

Konwersja na datetimeoffset

  • Gdy datetimeoffset wartość z czas strefa jest niejawnie pochodzi z wartości bez czas strefy (na przykład w operacji przypisanie proste), wartość bez czas strefy jest traktowane jako lokalne i bieżące domyślne czas przemieszczenie strefy (00: 00) jest odejmowany od jej nadać UTC.
  1. Strefy czasowej UTC (00: 00) jest zawsze dołączane podczas konwersji typów danych strefy non–czas do datetimeoffset dla następujących konwersji:
  • date Aby datetimeoffset

  • time Aby datetimeoffset

  • datetime2 Aby datetimeoffset

  • datetimeor smalldatetime to datetimeoffset

  • Literały w nieprawidłowy ciąg date, time, lub datetime bez czas strefy formaty do datetimeoffset

Konwersja z datetimeoffset

Podczas konwersji z datetimeoffset do następujących typów stref non–czas styl 0 (domyślnie) zawsze wskazuje, że zwrot date, time, datetime2, datetime, lub smalltime wartość jest w formacie lokalne przesunięcie strefy czasowej konserwowane; i styl 1 zawsze wskazuje UTC format.

Ilekroć datę lub czas wartość bez czas w jednym z następujących konwersje niejawnie pochodzi strefy datetimeoffset wartość jest traktowana jako UTC.Przemieszczenie konserwowanych strefy czasowej jest dodawana do wartości, aby dać czas lokalny.Wynik, bez żadnych przesunięcie strefy czasowej jest czas lokalny.

  • datetimeoffset Aby date

  • datetimeoffset Aby time

  • datetimeoffset Aby datetime2

  • datetimeoffsetto datetime or smalldatetime

  • Nie można użyć stylów 0 i 1 datetimeoffset do ciąg konwersji.Zamiast tego należy najpierw przekonwertować z datetimeoffset do datetime2 lub datetime, a następniedo varchar lub char.

Jeżeli istniejący styl konwersji zawiera czas części i konwersji jest z datetimeoffset ciąg, czas przesunięcie strefy (z wyjątkiem dla stylu 127) jest dołączony.Jeśli nie chcesz czas przesunięcie strefy można RZUTOWAĆ na datetime2 pierwsze i następnie do ciąg.

Data wszystkich istniejących i czas style zastosuje się do wszelkich datetimeoffset do konwersji ciągów i czas-przesunięcie strefy zostaną zachowane.

Ciąg wejściowy czas przesunięcia części strefy powinny być zawsze podwójne cyfr dla zarówno hh mm i znak, albo + lub – jest obowiązkowe.

Informacje w konwersji

  • Podczas konwersji z datetime2 lub datetimeoffset do date, nie ma żadnych zaokrąglania i część data jest ekstrahowana jawnie.Dla datetimeoffset, ekstrakcji jest wykonywane na datę lokalną i czas , ale nie UTC wartość.

  • Dla dowolnego niejawna konwersja z datetimeoffset do date, time, datetime2, datetime, lub smalldatetime, konwersji jest oparty na datę lokalną i czas wartość (do trwałej czas przesunięcie strefy).Na przykład, jeśli datetimeoffset(3), wartość 12:20:20.999 2006-10-21-8: 00, jest konwertowany na time(3), wynik jest 12:20:20.999 20:20:20.999(UTC).

Obcięcie konwersji

  • Konwersje z wyższą dokładność czas dozwolone są wartości z wartościami precision dolnym.Wyższą dokładność wartości zostanie obcięty do dopasowanie typ precyzji niższe.

Konwersja ułamków sekund

Jeśli styl zawiera czas gg:mm:ss.mmm format, format będzie hh:mm:ss. [nnnnnnn] dla time(n), datetime2(n) i datetimeoffset(n).Liczba cyfr zależy od specyfikacji typu.Tylko precision milisekund, należy przekonwertować na datetime2(3) pierwszy, a następnie do ciąg.

Style 9, 109, 13, 113, 21, 121, 130 i 131, dwukropek (:) ułamków sekund poprzedzających separatora nie jest obsługiwana dla time, datetime2 i datetimeoffset typy konwersji ciąg.Format wyjściowy ciąg z dowolnym z tych stylów zostanie przekształcona na kropkę (.).

Styl argumentów dla funkcji konwersji

W poniższej tabela przedstawiono przykłady date, time, datetime2, i datetimeoffset wartości stylu argumentów dla funkcja CONVERT.Aby uzyskać więcej informacji na temat stylów zobacz "Argumenty" sekcja CAST i CONVERT (Transact-SQL)

Style

Associated standard

Input/Output (3)

format

date

time(n)

datetime2(n)

datetimeoffset(n)

0 or 100 (1,2)

Default

Pon dd rrrr hh:miAM (lub PM)

Jan 1 2001

12:20 PM

1 Stycznia 2001 12:20 PM

1 Stycznia 2001 12:20 PM-08: 00

101

USA

dd/mm/rrrr

01/01/2001

-

01/01/2001

01/01/2001

102

ANSI

yy.mm.dd

2001.01.01

-

2001.01.01

2001.01.01

103

Brytyjskie i francuski

mm/dd/rr

01/01/2001

-

01/01/2001

01/01/2001

104

Niemiecki

dd.mm.yy

01.01.2001

-

01.01.2001

01.01.2001

105

Włoski

dd-mm rr

01-01-2001

-

01-01-2001

01-01-2001

106(1)

-

dd mon RR

01 Stycznia 2001 r.

-

01 Stycznia 2001 r.

01 Stycznia 2001 r.

107(1)

-

Pon dd, RR

01 Stycznia 2001 r.

-

01 Stycznia 2001 r.

01 Stycznia 2001 r.

108

-

hh:mi:ss

-

12:20:20

12:20:20

12:20:20

9 or 109 (1,2)

Domyślnie + milisekund

Pon dd rrrr hh:mi:ss:mmmAM (lub PM)

Jan 1 2001

12:20:20.1234567 AM

12:20:20.1234567 2001 1 Sty PM

12:20:20:1230000 2001 1 Sty PM-08: 00

110

United States

mm-dd rr

01-01-2001

-

01-01-2001

01-01-2001

111

JAPONIA

dd/mm/dd

2001/01/01

-

2001/01/01

2001/01/01

112

ISO

rrmmdd

20010101

-

20010101

20010101

13 or 113 (1,2)

Domyślnie Europy + milisekund

dd mon rrrr hh:mi:ss:mmm(24h)

01 Stycznia 2001 r.

12:20:20.1234567

01 2001 Sty 12:20:20.1234567

01 2001 Sty 12:20:20:1230000-08: 00

114

-

hh:mi:ss:mmm(24h)

-

12:20:20.1234567

12:20:20.1234567

12:20:20:1230000 -08:00

20 or 120 (2)

Kanoniczna ODBC

rrrr mm-dd hh:mi:ss(24h)

2001-01-01

12:20:20

2001-01-01 12:20:20

2001-01-01 12:20:20 -08:00

21 or 121 (2)

ODBC kanoniczny (w milisekundach)

rrrr mm-dd hh:mi:ss.mmm(24h)

2001-01-01

12:20:20.1234567

2001-01-01 12:20:20.1234567

2001-01-01 12:20:20.1230000 -08:00

126 (4)

ISO8601

rrrr mm-ddThh:mi:ss.mmm (bez spacji)

2001-01-01

12:20:20.1234567

2001-01-01T 12:20:20.1234567

2001-01-01T 12:20:20.1234567

127(6, 7)

ISO8601 z czas z strefy.

rrrr mm-ddThh:mi:ss.mmmZ

(bez spacji)

2001-01-01

12:20:20.1234567Z

2001-01-01T 12:20:20.1234567Z

2001-01-01T20:20:20.1230000Z

130 (1,2)

Hijri (5)

dd mon rrrr hh:mi:ss:mmmAM

01 Stycznia 2001 r.

PM 12:20:20.1230000

12:20:20.1230000 01 2001 Sty PM

Dnia 1 stycznia 2001 r. 12:20:20:1230000 PM-08: 00

131 (2)

Hijri (5)

hh:mi:ss:mmmAM mm/dd/rr

01/01/2001

PM 12:20:20.1230000

01/01/2001 12:20:20.1230000 PM

01/01/2001 12:20:20.1230000 PM-08: 00

1 Te wartości stylu zwracają wyniki rodzaju.Wszystkie (RR) (bez stulecia) zawiera style i podzbiór (rrrr) (z century) style.

2 The default values (style0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).

3 Dane wejściowe podczas konwertowania datetime; wyjścia podczas konwertowania danych znakowych.

4 XML przeznaczony.Do konwersji z datetime lub smalldatetime do danych znakowych format wyjściowy jest opisany w poprzedniej tabela.

5 Hijri is a calendar system with several variations.SQL Server uses the Kuwaiti algorithm.

6 Obsługiwana tylko rzutowanie znaków danych do datetime lub smalldatetime.Gdy dane znakowe, które reprezentuje tylko data lub czas tylko składniki jest oddanych do datetime lub smalldatetime typów danych składnik czas nieokreślony jest zestaw 00:00:00.000 a datą nieokreślonego składnika jest zestaw do 1900-01-01.

7The optional time zone indicator, Z, is used to make it easier to map XML datetime values that have time zone information to SQL Server datetime values that have no time zone.Wskaźnik jest z czas strefy UTC 0.

SQL Server Data i godzina ograniczenia

Na poniższej liście, Data i czas odnoszą się do wszelkich daty -czas typ danych, który zawiera datę lub czas części.

  • Zapisywanie nie letni po stronie serwera czas (DST) obsługę datetimeoffset.

  • Brak obsługi kalendarzu juliańskim data.

  • Nie czas obsługi "24" reprezentacja godzinę na północy.

  • Nie czas obsługi "drugie przestępnych" obsługuje ponad "59".

  • Nie czas obsługi "nanosekund jednego" lub większa precyzja ułamkowe drugiego.

  • Brak obsługi strefę czasową na czas.

  • Brak obsługi operacji SQL standardowego INTERWAŁU.

Zgodności ze starszymi wersjami klientów niskiego poziom

Niektóre niedziałający-poziom klienci nie obsługujątime, date, datetime2 i datetimeoffset typy danych są dodawane w SQL Server 2008.W poniższej tabela przedstawiono mapowanie typu między wystąpienie wyższego poziomu SQL Server 2008 i niedziałający-poziom klientów.

Typ danych programu SQL Server 2008

Domyślny ciąg w formacie literalnym przekazany do niedziałający-poziom klient

ODBC niskiego poziom

OLEDB niskiego poziom

JDBC niskiego poziom

SQLCLIENT niskiego poziom

time

hh:mm:ss[.nnnnnnn]

SQL_WVARCHAR lub SQL_VARCHAR

DBTYPE_WSTRor typem DBTYPE_STR

Java.SQL.String

Ciąg lub SqString

date

RRRR MM-DD

SQL_WVARCHAR lub SQL_VARCHAR

DBTYPE_WSTRor typem DBTYPE_STR

Java.SQL.String

Ciąg lub SqString

datetime2

YYYY-MM-DD hh:mm:ss[.nnnnnnn]

SQL_WVARCHAR lub SQL_VARCHAR

DBTYPE_WSTRor typem DBTYPE_STR

Java.SQL.String

Ciąg lub SqString

datetimeoffset

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm

SQL_WVARCHAR lub SQL_VARCHAR

DBTYPE_WSTRor typem DBTYPE_STR

Java.SQL.String

Ciąg lub SqString

Przykłady

A.Porównywania data i czas typów danych

Poniższy przykład porównuje wyniki rzutowania dla każdej daty literał ciągu znaków i czas typu danych.Próby CAST ciąg literału z dokładnością ułamków sekund jest więcej niż dozwolone dla smalldatetime lub datetime podniesie błąd.

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';

Typ danych

Output

time

12:35:29.1234567

date

2007-05-08

smalldatetime

2007-05-08 12:35:00

datetime

2007-05-08 12:35:29.123

datetime2(7)

2007-05-08 12:35:29.1234567

datetimeoffset(7)

2007-05-08 12:35:29.1234567 +12:15

B.Uzyskiwanie bieżącą data i czas systemową

Poniższy przykład pokazuje sposób używania SQL Server funkcje systemowe, które zwraca bieżącą data i czas.

SELECT SYSDATETIME() AS 'SYSDATETIME'

--Results
--SYSDATETIME
--2007-10-22 14:10:41.7984554
--(1 row(s) affected)

SELECT SYSDATETIMEOFFSET() AS 'SYSDATETIMEOFFSET'

--Results
--SYSDATETIMEOFFSET
--2007-10-22 14:11:34.2607172 -0
--(1 row(s) affected)

SELECT SYSUTCDATETIME() AS 'SYSUTCDATETIME'

--Results
--SYSUTCDATETIME
--2007-10-22 21:12:11.7069470
--(1 row(s) affected)

SELECT CURRENT_TIMESTAMP AS 'CURRENT_TIMESTAMP'

--Results
--CURRENT_TIMESTAMP
-------------------------
--2007-10-22 14:12:33.320
--(1 row(s) affected)

SELECT GETDATE() AS 'GETDATE'

--Results
--GETDATE
--2007-10-22 14:13:57.943
--(1 row(s) affected)

SELECT GETUTCDATE() AS 'GETUTCDATE'

--Results
--GETUTCDATE
--2007-10-22 21:14:35.657
--(1 row(s) affected)

C.Wyszukiwanie wszystkich wartości datetime2 w dniu

  • Poniższy przykład pokazuje sposób wyszukać wszystkie data i czas wartości w ciągu jednego dnia.
-- Create a table that contains with the following dates:
--     The last date-time in 2005-04-06, '2005-04-06 23:59:59.9999999'
--     The first date-time in 2005-04-07, '2005-04-07 00:00:00.0000000'
--     The last date-time in 2005-04-07, '2005-04-07 23:59:59.9999999'
--     The first date-time in 2005-04-08, '2005-04-08 00:00:00.0000000'
CREATE TABLE #Search
    (
    MyDate datetime2
    );
INSERT INTO #Search(MyDate)VALUES('2005-04-06 23:59:59.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-07 00:00:00.0000000');
INSERT INTO #Search(MyDate)VALUES('2005-04-07 23:59:59.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-08 00:00:00.0000000');

-- The following four SELECT statements show different ways to find
-- only the two rows that contain 2005-04-07 dates.
--Use CONVERT.
SELECT MyDate 
FROM #Search 
WHERE CONVERT(date,MyDate) = '2005-04-07';

--Use >= and <=.
SELECT MyDate 
FROM #Search 
WHERE MyDate >= '2005-04-07 00:00:00.0000000' 
    AND MyDate <= '2005-04-07 23:59:59.9999999';

--Use > and <.
SELECT MyDate
FROM #Search
WHERE MyDate > '2005-04-06 23:59:59.9999999'
    AND MyDate < '2005-04-08 00:00:00.0000000';

--Use BETWEEN AND.
SELECT MyDate
FROM #Search
WHERE MyDate BETWEEN '2005-04-07 00:00:00.0000000'
    AND '2005-04-07 23:59:59.9999999';
DROP TABLE #Search
GO

D.Wyszukiwanie czas w dniu okresu

Następujące przykłady przedstawiają metody wyszukiwania dat, które mają czas wartości, aby znaleźć czas zakres.

-- Create a table called Search and insert
-- five different time values for the same
-- date.

CREATE TABLE #Search
    (
    MyDate datetime2
    );

INSERT INTO #Search(MyDate)VALUES('2005-04-06 08:59:59.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-06 09:00:00.0000000');
INSERT INTO #Search(MyDate)VALUES('2005-04-06 09:00:00.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-06 16:59:59.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-06 17:00:00.0000000');

-- The following SELECT statements show different ways
-- to search for dates that have time values to find a
-- time range.

--Using CONVERT with time (0) to ignore fractional seconds
SELECT MyDate 
FROM #Search 
WHERE CONVERT(time(0),MyDate) = '09:00:00';

--Returns two rows (ignores fractional seconds):
--2005-04-06 08:59:59.9999999
--2005-04-06 09:00:00.0000000

--Using CONVERT with time (7) to include fractional seconds
SELECT MyDate 
FROM #Search 
WHERE CONVERT(time(7),MyDate) = '09:00:00';

--Returns one row (matches fractional seconds):
--2005-04-06 09:00:00.0000000


--Each of the SELECT statements below use CONVERT
--to find all times in an eight-hour period.

--Use CONVERT with >= and <=.
SELECT MyDate 
FROM #Search 
WHERE CONVERT(time(7),MyDate) >=  '09:00:00.0000000'
    AND CONVERT(time(7),MyDate) <= '16:59:59.9999999'

--Use CONVERT with > and <.
SELECT MyDate
FROM #Search
WHERE CONVERT(time(7),MyDate) > '08:59:59.9999999'
    AND CONVERT(time(7),MyDate) < '17:00:00.0000000';

--Use CONVERT with BETWEEN AND
SELECT MyDate
FROM #Search
WHERE CONVERT(time(7),MyDate) BETWEEN '09:00:00.0000000'
    AND '16:59:59.9999999';
DROP TABLE #Search
GO

E.Używanie DATEPART i DATEADD do znajdowania pierwszego i ostatniego dnia datepart

Poniższy przykład pokazuje sposób zwrócić pierwszy lub ostatni dzień z datepart.

-- When several months, quarters, or years are added to the base
-- year,1900-01-01, the returned day is the first day of a month.
-- To calculate the last day of the current month, you need to
--
-- 1. Find the difference in months between today and the base
--    year (0 ='1900-01-01'). This is accomplished by
--
-- DATEDIFF(month, 0, SYSDATETIME())
-- 2. Add that number of months plus 1 to the base year (0)
--    to obtain the first day of the next month.
--    DATEADD(month, DATEDIFF(month, 0, SYSDATETIME()) + 1, 0)
-- 3. Subtract 1 day.
--
--Find the first day of the current month.
SELECT DATEADD(month, DATEDIFF(month, 0, SYSDATETIME()), 0);

--Find the last day of the current month.
SELECT DATEADD(month, DATEDIFF(month, 0, SYSDATETIME()) + 1, 0) - 1;

-- Find the first day of the current quarter.
SELECT DATEADD(quarter, DATEDIFF(quarter, 0, SYSDATETIME()), 0);

-- Find the last day of the current quarter.
SELECT DATEADD(quarter, DATEDIFF(quarter, -1, SYSDATETIME()), -1);

-- Find the first day of the current year.
SELECT DATEADD(year, DATEDIFF(year, 0, SYSDATETIME()), 0);

-- Find the last day of the current year.
SELECT DATEADD(year, DATEDIFF(year, -1, SYSDATETIME()), -1);

F.Używając argumentów użytkownika datepart DATEADD, DATEDIFF, DATENAME i DATEPART

Poniższy przykład tworzy zdefiniowanej przez użytkownika funkcja wartość skalarna dodający stała część datetime2 wartości.

USE tempdb
GO
CREATE FUNCTION UserDateadd
    (
    @datepart nvarchar(11)
    ,@number int 
    ,@date datetime2
    )
RETURNS datetime2
AS
BEGIN
    DECLARE @Return datetime2

    SELECT @Return = CASE @datepart
        WHEN 'year' THEN DATEADD(year,@number,@date) 
        WHEN 'yy' THEN DATEADD(year,@number,@date) 
        WHEN 'yyyy' THEN DATEADD(year,@number,@date) 
        WHEN 'quarter' THEN DATEADD(quarter,@number,@date) 
        WHEN 'qq' THEN DATEADD(quarter,@number,@date) 
        WHEN 'month' THEN DATEADD(month,@number,@date) 
        WHEN 'mm' THEN DATEADD(month,@number,@date) 
        WHEN 'm' THEN DATEADD(month,@number,@date) 
        WHEN 'dayofyear' THEN DATEADD(dayofyear,@number,@date) 
        WHEN 'dy' THEN DATEADD(dayofyear,@number,@date) 
        WHEN 'y' THEN DATEADD(dayofyear,@number,@date) 
        WHEN 'day' THEN DATEADD(day,@number,@date) 
        WHEN 'dd' THEN DATEADD(day,@number,@date) 
        WHEN 'd' THEN DATEADD(day,@number,@date) 
        WHEN 'week' THEN DATEADD(week,@number,@date) 
        WHEN 'wk' THEN DATEADD(week,@number,@date) 
        WHEN 'ww' THEN DATEADD(week,@number,@date) 
        WHEN 'weekday' THEN DATEADD(weekday,@number,@date) 
        WHEN 'wk' THEN DATEADD(weekday,@number,@date) 
        WHEN 'w' THEN DATEADD(weekday,@number,@date) 
        WHEN 'hour' THEN DATEADD(hour,@number,@date) 
        WHEN 'hh' THEN DATEADD(hour,@number,@date) 
        WHEN 'minute' THEN DATEADD(minute,@number,@date)
        WHEN 'mi' THEN DATEADD(minute,@number,@date) 
        WHEN 'n' THEN DATEADD(minute,@number,@date)  
        WHEN 'second' THEN DATEADD(second,@number,@date) 
        WHEN 'ss' THEN DATEADD(second,@number,@date)
        WHEN 's' THEN DATEADD(second,@number,@date)
        WHEN 'millisecond' THEN DATEADD(millisecond,@number,@date) 
        WHEN 'ms' THEN DATEADD(millisecond,@number,@date) 
        WHEN 'microsecond' THEN DATEADD(microsecond,@number,@date)
        WHEN 'mcs' THEN DATEADD(microsecond,@number,@date)
        WHEN 'nanosecond' THEN DATEADD(nanosecond,@number,@date)
        WHEN 'ns' THEN DATEADD(nanosecond,@number,@date)
    END
    return @Return
END
GO

SELECT GetDate()
SELECT dbo.UserDateadd('year', 1, GetDate())
GO

G.Za pomocą DATEPART grupy według części data

W poniższym przykładzie użyto AdventureWorks2008R2 przykładowej bazy danych.DATEPART Jest używany do grupowania łącznej sprzedaży według tygodnia, rok, miesiąc i rok i miesiąc/dzień tygodnia.

USE AdventureWorks2008R2;
GO
SELECT SUM(TotalDue) AS 'Total Sales'
    ,DATEPART(year,OrderDate)AS 'By Year'
    ,DATEPART(month,OrderDate) AS 'By Month'
    ,DATEPART(weekday,OrderDate) AS 'By Weekday'
FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) IN('2007','2008')
GROUP BY GROUPING SETS 
    (
     (DATEPART(year,OrderDate))
    ,(DATEPART(month,OrderDate))
    ,(DATEPART(weekday,OrderDate))
    ,(
        DATEPART(year,OrderDate)
        ,DATEPART(month,OrderDate)
        ,DATEPART(weekday,OrderDate))
    )
ORDER BY DATEPART(year,OrderDate)
    ,DATEPART(month,OrderDate)
    ,DATEPART(weekday,OrderDate);