Using Date and Time Data
W poniższych sekcjach w tym temacie przedstawiono informacje i przykłady, na podstawie daty i czas typów danych i funkcji.Aby zapoznać się z omówieniem wszystkich Transact-SQL Data i czas typów danych i funkcji, zobacz Data i godzina, Data typy i funkcje (języka Transact-SQL).
Używanie operatorów z typy danych czas i Data
Korzystanie z narzędzia Data i czas formatów
Ciąg czas formatów i Data Literal
Format ciąg nierozdzielone
ISO 8601 format
Alfabetyczne formatów data
Formaty liczbowe Data
czas Formaty
Format data i czas ODBC
Konwertowanie data, czas, dateczas2 i dateczasoffset
Konwersja pomiędzy literały ciągów i czas(n), data, datetime2(n) i datetimeoffset(n)
Konwersja pomiędzy typy danych czas i Data
Za pomocą CAST i CONVERT czas, data, datetime2 i datetimeoffset
Argumenty stylu dla Functionq CONVERT
SQL Server Data i godzina ograniczenia
Zgodność ze starszymi wersjami dla klientów niższych poziomów
Przykłady
Używanie operatorów z typy danych czas i Data
(Operatory relacyjne<, <=, >, >=, <>), operatory porównania (=, <, <=, >, >=, <>, !<, !>) i operatorów logicznych i logicznych predykatów (IS NULL IS NOT NULL, W, BETWEEN EXISTS NOT EXISTS i LIKE) są obsługiwane przez wszystkie data i czas typów danych.
Data i czas arytmetyczne operatorów
Dodawanie i odejmowanie dla wszystkich dat i czas używać typów danychDATEADD and TEKST DATEDIFF.
Korzystanie z narzędzia Data i czas formatów
Formaty literał ciąg modyfikacji prezentacji danych w aplikacjach dla użytkowników, ale nie podstawowej liczby całkowitej pamięci masowej format w SQL Server. Jednak SQL Server może interpretować wartość data w formacie literał ciąg znaków, wprowadzania przez aplikację lub użytkownika do magazynu lub funkcja data, jak inne data. Interpretacja zależy od kombinacji format literału ciąg, typ danych i plików wykonywalnych DATEFORMAT USTAWIANIE, USTAWIANIE JĘZYKA and język domyślny opcji ustawienia.
Niektóre formaty literał ciąg znaków nie są zagrożone tych ustawień.Należy wziąć pod uwagę przy użyciu formatu, który nie zależy od tych ustawień, jeśli nie 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.
Aby dowiedzieć się, domyślnym formatem literał ciąg znaków dla klientów niskiego poziom, zobacz temat dla każdej daty i czas typu danych.Aby zapoznać się z omówieniem wszystkich Transact-SQL Data i czas typów danych i funkcji, zobacz Data i godzina, Data typy i funkcje (języka Transact-SQL).
The ydm data format is not supported for the date, datetime2 and datetimeoffset types. Błąd czas wykonywania zostanie zwiększony.
Ciąg czas formatów i Data Literal
Formaty tekstowe, następujące tabela listy inną data i czas.Firma Microsoft zaleca użycie data-czas formaty, które nie są zależne od DATEFORMAT i są w wielu językach.Formaty ISO 8601, '23T14:23:05 1998 - 02-' i ' 1998 - 02 - 23T14:23:05 - 08: 00 "są tylko formaty to międzynarodowy standard.Nie są DATEFORMAT lub domyślny język logowania zależne oraz są w wielu językach.
Data-czas części |
Typ formatu |
Przykład formatu |
Można połączyć z innych formatów |
DATEFORMAT zależnych |
Wielojęzyczny |
---|---|---|---|---|---|
Data |
UN-Separated ISO 8601 |
'19980223' |
Tak |
Nie |
Tak |
Data |
Liczbowy |
'02/23/1998' |
Tak |
tak |
Nie (DATEFORMAT) |
Data |
ISO 8601 numeryczne |
'1998-02-23' |
Tak |
Nie |
Nie |
Data |
Alfabetycznie |
"23 lutego 1998 r." |
Tak |
Nie |
Nie (miesiąca lub krótkie miesiąca) |
Data |
Data ODBC |
{d ' 1998 - 02 - 23 "} |
Nie |
Nie |
Tak |
Godzina |
ISO 8601 czas |
'14:23:05' '10:00:00.123456' |
Tak |
Nie |
Tak |
Godzina |
Czas ODBC |
{t "14: 23: 05"} |
Nie |
Nie |
Tak |
Data-czas |
Data ODBC-czas |
{ts ' 1998 - 02 - 23 14: 23: 05 "} |
Nie |
Nie |
Tak |
Data-czas |
ISO 8601 |
"23T14:23:05 1998 02-„ "1998 - 02 - 23T14:23:05-08: ' |
Nie |
Nie |
Tak date, datetime2, datetimeoffset. |
Data-czas |
ANSI SQL Standard |
'1998-02-23 14:23:05' '1998-02-23 14:23:05 -08:00' |
Nie |
Nie)datetime2, datetimeoffset) Tak)datetime) |
Tak date, datetime2, datetimeoffset. |
Data-czas |
Połączenie z datą i czas |
'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 |
TimeZone |
TimeZone format |
'+12:00' '01:00' '-08:00' "" Z" |
Tak |
Nie |
Tak |
Poniższe instrukcje wyświetlane efekty zestaw LANGUAGE i zestaw DATEFORMAT ustawień.
Format ciąg nierozdzielone
Można określić data dane jako ciąg nierozdzielone.Dane data można określić przy użyciu czterech, sześciu, lub osiem cyfr, pusty ciąg lub wartość czas bez wartości data.
Ustawienie sesja data FORMAT zestaw nie jest stosowane do wszystkich liczbowych data wpisów, takich jak wpisów numerycznych bez separatorów.Cyfra sześć lub osiem cyfr ciągi są zawsze interpretowane jako ymd. Miesiąc i dzień musi być zawsze dwie cyfry.
Jest to prawidłowy ciąg un-separated format: [19]960415
Ciąg tylko czterech cyfr jest interpretowana jako rok.Miesiąc i dzień są ustawione na 1 stycznia.W przypadku określenia tylko czterech cyfr, należy dołączyć wieku.
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)
The T indicates the start of the czas part of the data-czas value.
Aby używać formatu ISO 8601, należy określić każdy element w tym formacie.Obejmuje to literę T, dwukropki (:), znak + lub - oraz kropki (.).Nawiasy wskazują, że ułamkowe części sekund lub składniki przesunięcia strefy czasowej są opcjonalne.
W poniższym przykładzie są zwracane tylko zamówienia których cena jednostkowa jest mniejsza niż 5 zł, a następnie oblicza całkowitą sumę linii produktu oraz sumy.
Korzyści w formacie ISO 8601 to, że jest to międzynarodowy standard.Data i czas jednoznaczne są wartości, które są określane za pomocą tego formatu.Ten format nie jest zagrożony zestaw DATEFORMAT zestaw LANGUAGE logowania domyślnych ustawień języka.
Poniżej przedstawiono dwa przykłady wartości data i godziny, które są określane w formacie ISO 8601:
2004-05-23T14:25:10
2004 - 05 - 23T14:25:10.1234567 + 07: 00
Alfabetyczne formatów data
Można określić w ciągu miesiąca jako nazwę, na przykład Kwiecień lub skrót Kwi w języku angielskim.Te powinny być określone w ustawienie języka sesja, na przykład avril or avr w języku francuskim.Przecinki są opcjonalne i wielkości liter jest ignorowana.
Można użyć COMPUTE BY i COMPUTE bez BY w tej samej kwerendy.
Następująca kwerenda znajduje sumę wielkości zamówień oraz sumy wiersza typu produktu, a następnie oblicza sumę wielkości zamówień oraz sumy wiersza.
Jeśli określisz tylko dwie ostatnie cyfry roku, mniej niż dwie ostatnie cyfry wartość wartości dwie cyfry roku odcięcia opcja konfiguracja znajdują się w tym samym wieku jako ustawień skróconego formatu roku.Wartości, które są większe niż lub równa wartości tej opcji znajdują się w wieku, dostarczanego przed ustawień skróconego formatu roku.Na przykład jeśli dwie cyfry roku odcięcia jest 2050 (ustawienie domyślne), 25 jest interpretowana jako 2025 i 50 jest interpretowana jako 1950.Aby uniknąć niejednoznaczności, za pomocą czterech cyfr.
Następujący przykład wyszukuje sumę cen wszystkich zamówień, których cena jednostkowa jest mniejsza niż 5 dolarów zorganizowane według IDENTYFIKATORA produktu oraz ilość zamówienia, a także sumę cen wszystkich zamówień mniej niż 5 dolarów zorganizowane według tylko identyfikator produktu.
Można użyć innych funkcji agregujących w tym samym sprawozdaniu przez więcej niż jeden COMPUTE BY klauzula.
Poniższe formaty są prawidłowe formaty alfabetycznej SQL Server dane data. Znaki, które są ujęte w nawiasy są opcjonalne.
Kwerendy wygląda następująco:
Obliczanie sumy dla grup przy użyciu COMPUTE BY
W poniższym przykładzie użyto dwa przykłady kodu służącego do wyświetlania użycia COMPUTE BY.
[15] Apr[il][,] 1996
15 Apr[il][,][19]96
15 [19]96 apr[il]
[15] 1996 apr[il]
O.
Obliczanie sumy wartości za pomocą COMPUTE bez BY
Formaty liczbowe Data
Dane daty można określić z użyciem liczbowej wartości miesiąca.Na przykład data 97-05-20 przedstawia dwudziestego maja 1997 roku.Gdy jest używany liczbowy format daty, należy określić rok, miesiąc i dzień w ciągu, używając jako separatorów ukośników (/), myślników (-) lub kropek (.).Ciąg musi mieć następującą formę:
number separator number separator number [time] [time]
Prawidłowe są następujące formaty liczbowe:
Za pomocą GROUP BY i WHERE
[0]4-15-[19]96 -- (mdr)
GROUP BY przy użyciu wyrażenie
Następujący przykład grupy za pomocą wyrażenie.
Można grupować za pomocą wyrażenia wyrażenie nie zawiera funkcji agregacja.
Przy użyciu ORDER BY GROUP BY
W poniższym przykładzie znajduje średnia cena każdego typu produktu i porządkuje wyniki przez średnią cenę.
Przy użyciu klauzula HAVING
język domyślny DATEFORMAT sesja jest ustawiana przez język domyślny dla identyfikatora logowania, instrukcja zestaw LANGUAGE lub instrukcji zestaw DATEFORMAT.Kiedy język jest ustawiony na wartość us_english Logowanie domyślne lub w instrukcja zestaw LANGUAGE domyślnej kolejności data jest mdy.
Kolejność daty można zmienić, używając instrukcji SET DATEFORMAT.Ustawienie instrukcji SET DATEFORMAT określa sposób interpretacji wartości daty.Jeśli kolejność nie będzie zgodna z ustawieniem, wartości nie będą interpretowane jako daty, ponieważ będą znajdować się poza zakresem lub będą nieprawidłowo interpretowane.Na przykład ciąg 12/10/08 może być interpretowany jako jedna z sześciu dat, w zależności od ustawienia DATEFORMAT.Czterocyfrowy rok będzie interpretowany jako rok.
czas Formaty
SQL Server rozpoznaje następujące formaty dla danych czas.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
UŻYTKOWNIK 4 [0] [:30:20:500]
Poniższe instrukcje przedstawiają zwrotu wartości różnych danych wejściowych funkcja CAST.
Można określić sufiks AM lub PM wskazująca, czy wartość czas jest przed lub po 12 w południe.Wielkość symbolu AM lub PM jest ignorowana.
Godziny można określać przy użyciu obu zegara 12-godzinnym lub 24-godzinnym.Wartości godziny są interpretowane w następujący sposób.
Wartość godziny 00 reprezentuje godzinę od północy (AM), niezależnie od tego, czy należy określić AM.Nie można określić, kiedy godzinę jest równa 00 PM.
Godziny od 01 do 11 reprezentują godzin przedpołudniowych, jeśli określono ani AM lub PM.One również reprezentować godzin przedpołudniowych, gdy AM została określona.Stanowią one godzin popołudniowych, gdy określono PM.
Wartość godziny równa 12 przedstawia godzinę rozpoczynającą się w południe (jeśli nie określono znacznika AM lub PM).Jeśli określono znacznik AM, ta wartość przedstawia godzinę rozpoczynającą się o północy.Jeśli określono znacznik PM, ta wartość przedstawia godzinę rozpoczynającą się w południe.Na przykład godzina 12:01 wypada 1 minutę po południu, czyli odpowiada godzinie 12:01 PM, podczas gdy godzina 12:01 AM wypada 1 minutę po północy.Określenie godziny 12:01 AM ma taki sam efekt jak określenie godziny 00:01 lub 00:01 AM.
Wartości godziny od 13 do 23 reprezentuje godzin popołudniowych, jeśli nie zostanie określona AM lub PM.Stanowią one również godzin popołudniowych, gdy określono PM.Nie można określić AM od 13 do 23, gdy jest wartość godziny.
Wartość 24 godziny jest nieprawidłowy; Użyj 12: 00 AM lub 00: 00 do reprezentowania północy.
Milisekundy może być poprzedzona odpowiadającą jej albo dwukropek (:) lub znak kropki (.).Jeśli jest poprzedzony dwukropkiem, numer oznacza, że thousandths z drugiego.Jeśli jest poprzedzony przez okres, pojedyncza cyfra oznacza dziesiątych z drugiego, dwie cyfry oznaczają setnych od drugiego, a trzy cyfry oznaczają thousandths z drugiego.Na przykład 12:30:20:1 wskazuje sekundy dwudziestu i jedno - thousandth ostatnie 12: 30; 12:30:20.1 wskazuje sekundy dwudziestu i jedna dziesiąta ostatnie 12: 30.
Format data i czas ODBC
Interfejs API ODBC definiuje sekwencje znaków kontrolnych w celu przedstawiania wartości daty i godziny, dla których interfejs ODBC wywołuje dane sygnatury czasowej.Ten format sygnatury czasowej ODBC jest także obsługiwany przez definicję języka OLE DB (DBGUID-SQL) oraz dostawcę Microsoft OLE DB dla programu SQL Server.Aplikacje używające interfejsów API opartych na obiektach ADO oraz technologiach OLE DB i ODBC mogą używać tego formatu sygnatur czasowych ODBC w celu przestawiania dat i godzin.
SQL Server ODBC, dane są zawsze traktowane jako datetime Typ danych.
Sekwencje unikowe ODBC sygnatury czasowej są w formacie:
{ literal_type 'constant_value' }
literal_type
Określa typ sekwencji unikowej.Poniżej znajdują się nieprawidłowe argumenty dla literal_type.d = data only
t = czas only
ts = sygnatura czasowa (godzina + 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
RRRR MM-DDhh:mm:ss[.fff]
TExamples ODBC czas i daty są następujące:
U.
Za pomocą OPTION i wskazówki GROUP
{ t '13:33:41' }
Do not confuse the ODBC and OLE DB timestamp data type name with the Transact-SQLtimestamp data type name.Typ danych sygnatury czasowej ODBC i OLE DB, rekordy daty i godziny.The Transact-SQLtimestamp data type is a binary data type that has no time-related values.
Konwertowanie data, czas, dateczas2 i dateczasoffset
Istnieją dwa rodzaje konwersje między typami innej data: jawne a niejawnych. Niejawna konwersja wystąpić bez korzystania z funkcji CAST lub CONVERT.Jawne konwersje wymagane funkcje CAST lub CONVERT.
Konwersja pomiędzy literały ciągów i czas(n), data, datetime2(n) i datetimeoffset(n)
Podczas konwersji z literały ciągów znaków do typów data i godziny są dozwolone, jeśli wszystkie części ciągi są prawidłowe formaty.W przeciwnym razie powstaje błąd wykonania.
Niejawne konwersje lub jawne konwersje, które nie mają określonego stylu od data i czas będzie typów literały ciągów znaków w domyślnym formacie bieżącej sesja.
Dla niejawna konwersja z datą czas, typy danych dateczas2 i dateczasoffset ciągów znaków, standardowy format SQL hh:mi:ss. YYY-MM-DD [nnnnnnn] CONVERT stylu 121, zostaną zastosowane.CONVERT styl 0 formatu, mon dd rrrr hh:miAM (lub PM), jest stosowana dla danych typu Data/Godzina i smalldatetime.
W poniższej tabela przedstawiono zasady konwersji date, time, datetime2 i datetimeoffset typy i ciąg literałów.
Literał ciąg wejściowego |
date |
time(n) |
datetime2(n) |
datetimeoffset(n) |
---|---|---|---|---|
DATA ODBC |
Patrz Uwaga 1. |
Patrz Uwaga 1. |
Patrz Uwaga 1. |
Patrz Uwaga 1. |
CZAS ODBC |
Patrz Uwaga 1. |
Patrz Uwaga 1. |
Patrz Uwaga 1. |
Patrz Uwaga 1. |
DATA/GODZINA ODBC |
Patrz Uwaga 1. |
Patrz Uwaga 1. |
Patrz Uwaga 1. |
Patrz Uwaga 1. |
Tylko data |
Trivial |
Wartości domyślne są dostarczane. |
Domyślnie część czas 00: 00: 00. |
Domyślnie część czas 00: 00: 00.Domyślnie jest TIMEZONE + 00: 00. |
Tylko czas |
Wartości domyślne są dostarczane. |
Trivial |
Domyślnie część data 1900-1-1. |
Domyślnie część data 1900-1-1.Domyślnie TIMEZONE + 00: 00. |
Tylko TIMEZONE |
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 |
Używana jest data część ciąg wejściowego. |
Używany jest czas część ciąg wejściowego. |
Trivial |
Domyślnie jest TIMEZONE + 00: 00. |
DATA + TIMEZONE |
Niedozwolone |
Niedozwolone |
Niedozwolone |
Niedozwolone |
CZAS + TIMEZONE |
Wartości domyślne są dostarczane. |
Używany jest czas część ciąg wejściowego. |
Domyślnie część data 1900-1-1.Dane wejściowe TIMEZONE jest ignorowana. |
Domyślnie część data 1900-1-1. |
DATA + czas + czas STREFY |
Zostanie użyta data częścią lokalnego DATETIME. |
Użyte części czas lokalny DATETIME. |
Zostanie użyty lokalny DATETIME. |
Trivial |
Uwagi do konwersji
Literały ciągów znaków ODBC są mapowane na datetime Typ danych. Każde działanie przypisania z literały ODBC DATETIME do date, time, datetime2, lub datetimeoffsetypy t spowoduje, że niejawna konwersja między datetime i te typy zdefiniowane przez reguły konwersji.
Dokładność ułamków sekund datetime ma dokładnością do jednego setnych trzy sekundy (odpowiednik 3.33 milisekund lub 0.00333 sekund). Wartości są zaokrąglane do wielokrotności.000,.003 lub.007 sekund. '08/22/1995 10:15:19:999 "jest zaokrąglana ponieważ'. 999 ' przekracza dokładność.
Dla time(3), datetime2(3) lub datetimeoffset(3), dokładnością do jednej milisekundy ma dokładność ułamków sekund. Dlatego "1995 - 8 - 22 10:15:19:999" nie zostanie zaokrąglona.
Dane wejściowe TIMEZONE przesunięcie strony powinny być zawsze być podwójny cyfr hh i mm.Znak, albo + lub –, jest obowiązkowe.
Konwersja pomiędzy typy danych czas i Data
W tabelach w tej sekcji opisano sposób każdy następujący dzień i czas typy danych są konwertowane na inną datę i czas typów danych:
date
time(n)
datetime
smalldatetime
datetimeoffset(n)
datetime2
Data, typ danych
W poniższej tabela opisano zdarzenia występujące, gdy date Typ danych jest konwertowana na inną datę i czas typów danych.
Typ danych do konwersji na |
Szczegóły konwersji |
---|---|
time(n) |
Konwersja nie powiedzie się i powstaje 206 komunikat o błędzie: "Operandu typu clash: Data jest zgodna z czas". |
datetime |
Data jest kopiowana.W poniższym kodzie pokazano wyniki konwersji date wartość do datetime wartość.
|
smalldatetime |
Gdy date wartość z zakres od Smalldatetime, składnik data jest kopiowana i składnik godziny zestaw do 00:00:00.000.Gdy date wartość jest poza zakresem smalldatetime powstaje wartość 242 komunikat o błędzie: "Konwersja typu danych Data do typu danych smalldatetime spowodowało wartość limit czasu z zakres."; orazsmalldatetime wartość jest zestaw wartości null. W poniższym kodzie pokazano wyniki konwersji date wartość do smalldatetime wartość.
|
datetimeoffset(n) |
Data jest kopiowana, a czas jest zestaw 00:00.0000000 + 00: 00. W poniższym kodzie pokazano wyniki konwersji date wartość do datetimeoffset(3) wartość.
|
datetime2(n) |
Składnik data jest kopiowana, a składnik czas jest zestaw do 00:00.000000. W poniższym kodzie pokazano wyniki konwersji date wartość do datetime2(3) wartość.
|
czas(n) typ danych
W poniższej tabela opisano zdarzenia występujące, gdy time Typ danych jest konwertowana na inną datę i czas typów danych.
Typ danych do konwersji na |
Szczegóły konwersji |
---|---|
time(n) |
Zostaną skopiowane godzin, minut i sekund.Gdy dokładność obiekt obiekt docelowy jest mniejsza od precyzji urządzenie źródłowe, ułamków sekund zostanie obcięty do dokładności obiekt docelowy. W poniższym przykładzie przedstawiono wyniki konwersji time(4) wartość do time(3) wartość.
|
date |
Konwersja nie powiedzie się i powstaje 206 komunikat o błędzie: "Operandu typu clash: Data jest zgodna z czas". |
datetime |
Godziny, minuty i drugi wartości są kopiowane; i 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 wyniki zostaną obcięte. W poniższym kodzie pokazano wyniki konwersji time(4) wartość do datetime wartość.
|
smalldatetime |
Data jest zestaw do „ 1900 - 01 - 01 ' oraz godziny i minuty wartości są kopiowane.Sekund i ułamków sekund są zestaw na 0. W poniższym kodzie pokazano wyniki konwersji time(4) wartość do smalldatetime wartość.
|
datetimeoffset(n) |
Data jest zestaw do „ 1900 - 01 - 01 ' oraz czas jest kopiowany.Przesunięcie strefy jest ustawiony na czas + 00: 00.Gdy dokładność ułamków sekund time(n) wartość jest większa od precyzji datetimeoffset(n) wartość, wartość jest obcinana do dopasowanie. W poniższym przykładzie przedstawiono wyniki konwersji time(4) wartość do datetimeoffset(3) Typ.
|
datetime2(n) |
Data jest zestaw do „ 1900 - 01 - 01 ', czas, składnik jest kopiowany i strefę czasową, wyłączanie zestaw jest zestaw do 00: 00.Gdy dokładność ułamków sekund datetime2(n) wartość jest większa niż time(n) wartość, wartość zostanie skrócona do dopasowanie. W poniższym przykładzie przedstawiono wyniki konwersji time(4) wartość do datetime2(2) wartość.
|
Typ danych Data/Godzina
W poniższej tabela opisano zdarzenia występujące, gdy datetime Typ danych jest konwertowana na inną datę i czas typów danych.
Typ danych do konwersji na |
Szczegóły konwersji |
---|---|
date |
Rok, miesiąc i dzień są kopiowane.Składnik czas jest zestaw do 00:00:00.000. W poniższym kodzie pokazano wyniki konwersji date wartość do datetime wartość.
|
time(n) |
Składnik czas jest kopiowana, a składnik data jest zestaw do „ 1900 - 01 - 01 '.Gdy dokładność ułamkowa time(n) wartość większa niż trzy cyfry, wartość zostanie skrócona do dopasowanie. W poniższym przykładzie przedstawiono wyniki konwersji time(4) wartość do datetime wartość.
|
smalldatetime |
Kopiowane są godziny i minuty.Sekund i ułamków sekund są zestaw na 0. W poniższym kodzie pokazano wyniki konwersji smalldatetime wartość do datetime wartość.
|
datetimeoffset(n) |
Data i czas składników zostaną skopiowane.czas Strefy zostanie obcięta do liczby całkowitej.Gdy dokładność ułamkowa datetimeoffset(n) wartość jest większa niż trzy cyfry, wartość zostanie obcięty. W poniższym przykładzie przedstawiono wyniki konwersji datetimeoffset(4) wartość do datetime wartość.
|
datetime2(n) |
Data i czas są kopiowane.Gdy dokładność ułamkowa datetime2(n) wartość jest większa niż trzy cyfry, wartość zostanie obcięty. W poniższym przykładzie przedstawiono wyniki konwersji datetime2(4) wartość do datetime wartość.
|
Smalldatetime, typ danych
W poniższej tabela opisano zdarzenia występujące, gdy smalldatetime Typ danych jest konwertowana na inną datę i czas typów danych.
Typ danych do konwersji na |
Szczegóły konwersji |
---|---|
date |
Rok, miesiąc i dzień są kopiowane. W poniższym kodzie pokazano wyniki konwersji smalldatetime wartość do date wartość.
|
time(n) |
Zostaną skopiowane godzin, minut i sekund.Ułamków sekund są zestaw na 0. W poniższym kodzie pokazano wyniki konwersji smalldatetime wartość do time(4) wartość.
|
datetime |
The smalldatetime value is copied to the datetime value.Ułamków sekund są zestaw na 0. W poniższym kodzie pokazano wyniki konwersji smalldatetime wartość do datetime wartość.
|
datetimeoffset(n) |
The smalldatetime value is copied to the datetimeoffset(n) value.Ułamków sekund są ustawione na 0, a także czas przesunięcie strefy jest ustawiony do + 00: 0. W poniższym kodzie pokazano wyniki konwersji smalldatetime wartość do datetimeoffset(4) wartość.
|
datetime2(n) |
The smalldatetime value is copied to the datetime2(n) value.Ułamków sekund są zestaw na 0. W poniższym kodzie pokazano wyniki konwersji smalldatetime wartość do datetime2(4) wartość.
|
datetimeoffset(n) typ danych
W poniższej tabela opisano zdarzenia występujące, gdy datetimeoffset(n) Typ danych jest konwertowana na inną datę i czas typów danych.
Typ danych do konwersji na |
Szczegóły konwersji |
---|---|
date |
Rok, miesiąc i dzień są kopiowane. W poniższym kodzie pokazano wyniki konwersji datetimeoffset(4) wartość do date wartość.
|
time(n) |
Godzina, minuta, po drugie i ułamków sekund są kopiowane.czas Strefy, wartość zostanie obcięta do liczby całkowitej.Gdy dokładność datetimeoffset(n) wartość jest większa od precyzji time(n) wartość, wartość zostanie obcięta do liczby całkowitej. W poniższym kodzie pokazano wyniki konwersji datetimeoffset(4) wartość do time(3) wartość.
|
datetime |
data i czas wartości są kopiowane, a także czas strefy zostanie obcięta do liczby całkowitej.Gdy dokładność ułamkowa datetimeoffset(n) wartość jest większa niż trzy cyfry, wartość zostanie obcięta do liczby całkowitej. W poniższym kodzie pokazano wyniki konwersji datetimeoffset(4) wartość do datetime wartość.
|
smalldatetime |
Kopiowane są data, godziny i minuty.Są sekundy zestaw na 0. W poniższym kodzie pokazano wyniki konwersji datetimeoffset(3) wartość do smalldatetime wartość.
|
datetime2(n) |
Data i czas są kopiowane do datetime2 wartość, a także czas strefy zostanie obcięta do liczby całkowitej. Gdy dokładność datetime2(n) wartość jest większa od precyzji datetimeoffset(n) wartość, ułamków sekund są zaokrąglane do dopasowanie. Postępuj zgodnie z kodu pokazuje wyniki konwersji datetimeoffset(4) wartość do datetime2(3) wartość.
|
Typ danych datetime2
W poniższej tabela opisano zdarzenia występujące, gdy datetime2 Typ danych jest konwertowana na inną datę i czas typów danych.
Typ danych do konwersji na |
Szczegóły konwersji |
---|---|
date |
Rok, miesiąc i dzień są kopiowane. W poniższym kodzie pokazano wyniki konwersji datetime2(4) wartość do date wartość.
|
time(n) |
Godzina, minuta, po drugie i ułamków sekund są kopiowane. W poniższym kodzie pokazano wyniki konwersji datetime2(4) wartość do time(3) wartość.
|
datetime |
Data i czas wartości zostaną skopiowane.Gdy dokładność ułamkowa datetimeoffset(n) wartość jest większa niż trzy cyfry, wartość zostanie obcięta do liczby całkowitej. W poniższym kodzie pokazano wyniki konwersji datetime2 wartość do datetime wartość.
|
smalldatetime |
Kopiowane są data, godziny i minuty.Są sekundy zestaw na 0. W poniższym kodzie pokazano wyniki konwersji datetime2 wartość do smalldatetime wartość.
|
datetimeoffset(n) |
The datetime2(n) value is copied to the datetimeoffset(n) value.czas Przesunięcie strefy jest ustawiony do + 00: 0.Gdy dokładność datetime2(n) wartość jest większa od precyzji datetimeoffset(n) wartość, wartość jest obcinana do dopasowanie. W poniższym kodzie pokazano wyniki konwersji datetime2(5) wartość do datetimeoffset(3) wartość.
|
Za pomocą CAST i CONVERT czas, data, datetime2 i datetimeoffset
Ta sekcja zawiera informacje o konwersji między datą i czas typów danych.
Konwersja na datetimeoffset
- Za każdym razem, gdy datetimeoffset wartość o strefie czasowej jest niejawnie pochodzących z wartości bez strefy czasowej (na przykład w operacji przypisanie proste), wartość bez strefy czasowej jest traktowane jako lokalne i bieżącego przesunięcie strefy czasowej (00: 00) domyślny jest odejmowany od go do czas UTC.
- Strefa czasowa UTC (00: 00) zawsze są dołączane podczas konwersji typów danych strefy non–czas do datetimeoffset Aby konwersje następujących czynności:
date Aby datetimeoffset
time Aby datetimeoffset
datetime2 Aby datetimeoffset
datetime lub smalldatetime Aby datetimeoffset
Literały ciągów znaków w prawidłowym date, time, lub datetime bez czas formatów do strefy datetimeoffset
Konwersja z datetimeoffset
Podczas konwersji z datetimeoffset następujące typy stref non–czas stylu 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.
Za każdym razem, gdy wartość data lub godziny, bez niejawnie pochodzi strefy czasowej w jednym z następujących konwersje, datetimeoffset wartość jest traktowana jako czas UTC. Przesunięcie strefy czasowej konserwowane jest dodawana do wartości do czas lokalnego.Wynik, bez żadnych przesunięcie strefy czasowej jest czas lokalny.
datetimeoffset Aby date
datetimeoffset Aby time
datetimeoffset Aby datetime2
datetimeoffset Aby datetime lub smalldatetime
Nie można używać stylów 0 i 1 datetimeoffset do konwersji ciągów. Zamiast tego należy najpierw przekonwertować z datetimeoffset Aby datetime2 lub datetime, a następnieAby varchar lub char.
Jeśli istniejące CONVERT styl zawiera część czas i konwersja jest z datetimeoffset ciąg znaków, strefy czasowej przesunięcie (z wyjątkiem dla stylu 127) jest włączone. Jeśli nie chcesz, aby przesunięcie strefy czasowej, LANE do datetime2 pierwszy i następnie do ciąg.
Wszystkie istniejące data i czas style, które będą stosowane do żadnego datetimeoffset Aby ciąg konwersji i przesunięcie strefy czasowej zostanie zachowana.
Ciąg wejściowy czas części przesunięcie strefy powinny być zawsze podwójne cyfr dla obu hh mm i znaku, albo + lub – jest obowiązkowe.
Informacje o opuszczonych w konwersji
Podczas konwersji z datetime2 lub datetimeoffset Aby date, nie jest, bez zaokrąglania, a część data jest wyodrębniana jawnie. Dla datetimeoffset, wyodrębniania odbywa się na lokalnym data i czas, ale nie znasz wartości czas UTC.
Dla niejawna konwersja datetimeoffset Aby date, time, datetime2, datetime, lub smalldatetime, konwersja jest oparty na lokalną data i czas wartość (aby persistent czas przesunięcie strefy). Na przykład, jeśli datetimeoffset(3), wartość 2006-10-21 12:20:20.999-8: 00, jest konwertowany na time(3), wynik jest 12:20:20.999 nie 20:20:20.999(UTC).
Obcięcie w konwersji
- Podczas konwersji z wartości większej dokładności czas do wartości niższej precyzji są dozwolone.Wartości większej dokładności zostanie obcięty do niższej typ precyzji.
Konwersja sekundy ułamkowe
Jeśli styl zawiera hh:mm:ss.mmm formatu czas, w formacie staną się hh:mm:ss. [nnnnnnn] dla time(n), datetime2(n) i datetimeoffset(n). Liczba cyfr zależy od specyfikacji typu.Tylko milisekundy dokładności, należy przekonwertować na datetime2(3) pierwszy, a następnie na ciąg.
W przypadku stylów 9, 109, 13, 113, 21, 121, 130 i 131, dwukropek (:) ułamków sekund poprzedni separator nie jest obsługiwana dla time, datetime2 i datetimeoffset typy konwersji ciąg. Format ciąg dane wyjściowe z dowolnym z tych stylów zostanie można przekształcić je kropki (.).
Styl argumentów funkcja CONVERT
W poniższej tabela przedstawiono przykłady date, time, datetime2, a datetimeoffset wartości stylu argumentów dla funkcja konwersji. Aby dowiedzieć się więcej na temat stylów zobacz sekcję "Argumenty" CAST and CONVERT (Transact-SQL)
Style |
Associated standard |
Input/Output (3) format |
date |
time(n) |
datetime2(n) |
datetimeoffset(n) |
---|---|---|---|---|---|---|
0 or 100 (1,2) |
Default |
W bieżącej bazie danych muszą istnieć w tabela. |
Sty12001 |
12: 20 PM |
1 Stycznia 2001 12: 20 PM |
1 Stycznia 2001 12: 20 PM-08: 00 |
101 |
USA |
mm/dd/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 |
Wielka Brytania/Francja |
dd/mm/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 |
Obrazy i rysunki nie są indeksowane. |
01-01-2001 |
- |
01-01-2001 |
01-01-2001 |
106(1) |
- |
dd mon yy |
01 Stycznia 2001 r. |
- |
01 Stycznia 2001 r. |
01 Stycznia 2001 r. |
107(1) |
- |
Mon dd, yy |
01, 2001 R. |
- |
01, 2001 R. |
01, 2001 R. |
108 |
- |
Ta akcja umożliwia kolumna dla indeksowania pełnotekstowego. |
- |
12:20:20 |
12:20:20 |
12:20:20 |
9 or 109 (1,2) |
Wartość domyślna + milisekundy |
mon dd yyyy hh:mi:ss:mmmAM (lub PM) |
Sty12001 |
12:20:20.1234567 AM |
1 Stycznia 2001 r. 12:20:20.1234567 PM |
1 Stycznia 2001 r. 12:20:20:1230000 PM-08: 00 |
110 |
Stany Zjednoczone |
To język dane przechowywane kolumna. |
01-01-2001 |
- |
01-01-2001 |
01-01-2001 |
111 |
Japonia |
"Neutralna" należy używać, gdy kolumna zawiera dane w wielu językach lub w języku nieobsługiwanym. |
2001/01/01 |
- |
2001/01/01 |
2001/01/01 |
112 |
ISO |
Wartością domyślną jest określany na podstawie opcji konfiguracja domyślnego pełnego tekstu języka. |
20010101 |
- |
20010101 |
20010101 |
13 or 113 (1,2) |
Europejska wartość domyślna + milisekundy |
dd mon yyyy hh:mi:ss:mmm(24h) |
01 Stycznia 2001 r. |
12:20:20.1234567 |
01 Stycznia 2001 r. 12:20:20.1234567 |
01 Stycznia 2001 r. 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) |
Forma kanoniczna ODBC |
yyyy-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) |
Jeśli śledzenie zmian jest włączona i kolumny muszą być dodane lub usunięte z indeks pełnotekstowy, podczas gdy zachowywanie indeksu, w tabela powinny być dezaktywowany i wymagane kolumny powinny zostać dodane lub usunięte. |
Te akcje zamrozić indeksu. |
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) |
W tabela można uaktywnić później, podczas uruchamiania zapełnianie jest praktyczne. |
yyyy-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 ze strefą czasową Z. |
yyyy-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) |
Hidżra)5) |
dd mon yyyy hh:mi:ss:mmmAM |
01 Stycznia 2001 r. |
12:20:20.1230000 PM |
01 Stycznia 2001 r. 12:20:20.1230000 PM |
1 Stycznia 2001 r. 12:20:20:1230000 PM-08: 00 |
131 (2) |
Hidżra)5) |
Wszystkie kolumny wymienionych w klauzula funkcja jednej zapytanie pełnotekstowe muszą używać tej samej wersji językowej. |
01/01/2001 |
12:20:20.1230000 PM |
01/01/2001 12:20:20.1230000 PM |
01/01/2001 12:20:20.1230000 PM-08: 00 |
1 Te wartości stylów powodują zwrócenie niedeterministycznych wyników.Zawiera wszystkie style (yy) (bez stulecia) i podzbiór stylów (yyyy) (ze stuleciem).
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 konwersji na datetime; wyjścia podczas konwertowania danych znakowych.
4 Przeznaczony do użytku XML.Do konwersji z datetime lub smalldatetime do danych znakowych format wyjściowy to zgodnie z opisem w poprzedniej tabela.
5 Hijri is a calendar system with several variations.SQL Server uses the Kuwaiti algorithm.
6 Obsługiwane tylko wtedy, gdy rzutowanie z danych znakowych na datetime lub smalldatetime. Gdy dane znakowe, które reprezentuje tylko data lub tylko raz składników jest rzutować na datetime lub smalldatetime typy danych, składnik czas nieokreślony ustawiono 00:00:00.000 i składnik nieokreślony data jest ustawiony na 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 Serverdatetime values that have no time zone.sys.dm_exec_xml_handles (języka Transact-SQL)
SQL Server Data i godzina ograniczenia
Na poniższej liście Data i godzina odnoszą się do dowolnego typu danych Data / Godzina, który zawiera część daty lub godziny.
Nie są obsługiwane czas letniego (DST) po stronie serwera datetimeoffset.
Brak obsługi kalendarzu juliańskim data.
Brak obsługi czas reprezentacji ' 24 ' o północy.
Czas nie jest obsługa "przestępnych drugi" obsługuje ponad '59'.
Brak obsługi czas "nanosecond jednego" lub większy dla ułamków precyzji drugiego.
Brak obsługi strefę czasową na czas.
Brak obsługi operacji SQL standard INTERVAL.
Zgodność ze starszymi wersjami dla klientów niższych poziomów
Some niedziałający-poziom clients do not supportthe time, date, datetime2 and datetimeoffset data types added in SQL Server 2008. W poniższej tabela przedstawiono mapowanie typu między wystąpienie wyższego poziom SQL Server 2008 i klientów niskiego poziom.
Typ danych programu SQL Server 2008 |
Domyślny ciąg formatu literałowych przekazany do niedziałający-poziomie klient |
niedziałający-poziom ODBC |
niedziałający-poziom OLEDB |
niedziałający-poziom JDBC |
niedziałający-poziom SQLCLIENT |
---|---|---|---|---|---|
time |
hh:mm:ss[.nnnnnnn] |
SQL_WVARCHAR lub SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.SQL.ciąg |
Ciąg znaków lub SqString |
date |
RRRR MM-DD |
SQL_WVARCHAR lub SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.SQL.ciąg |
Ciąg znaków lub SqString |
datetime2 |
YYYY-MM-DD hh:mm:ss[.nnnnnnn] |
SQL_WVARCHAR lub SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.SQL.ciąg |
Ciąg znaków lub SqString |
datetimeoffset |
YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm |
SQL_WVARCHAR lub SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.SQL.ciąg |
Ciąg znaków lub SqString |
Przykłady
A.CONSTRAINT_TYPE
W poniższym przykładzie porównanie wyniki dla rzutowanie ciąg literału dla każdej daty i czas typu danych.Próby CAST literał z dokładnością ułamków sekund, która jest większa niż dozwolona dla ciąg znaków smalldatetime lub datetime podniesie błąd.
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 systemową i czas
W poniższym przykładzie przedstawiono sposób użycia SQL Server funkcje systemowe, która zwraca bieżącą data i czas.
C.Wyszukiwanie wszystkich wartości datetime2 w ciągu jednego dnia
- W poniższym przykładzie pokazano sposób wyszukać wszystkie data i czas wartości w ciągu jednego dnia.
D.Wyszukiwanie okres czas, w ciągu jednego dnia
Następujące przykłady przedstawiają metody wyszukiwania dla dat, które mają wartości czas, aby znaleźć przedziału czas.
E.Korzystanie w parametrze DATEPART i DATEADD w celu znalezienia pierwszego i ostatniego dnia w parametrze datepart
W poniższym przykładzie pokazano, jak zwrócić pierwszy lub ostatni dzień z datepart.
F.Używając argumentów zdefiniowanych przez użytkownika w parametrze datepart DATEADD, tekst DATEDIFF, DATENAME i w parametrze DATEPART
Poniższy przykład tworzy wartość skalarna funkcja zdefiniowanej przez użytkownika, który dodaje stała do dowolnej części datetime2 wartość.
G.Używając w parametrze DATEPART do grupy według części data
W poniższym przykładzie użyto AdventureWorks Przykładowa baza danych. The DATEPART is used to group total sales by weekday, month, year, and year/month/weekday.
USE AdventureWorks
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('2003','2004')
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)
See Also