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
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
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.
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ść.
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.
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
smalldatetime |
data, godziny i minuty są kopiowane.Sekund są zestaw na 0. Poniższy kod przedstawia wyniki konwersji datetimeoffset(3) wartość smalldatetime wartości.
|
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.
|
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.
|
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.
|
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.
|
smalldatetime |
data, godziny i minuty są kopiowane.Sekund są zestaw na 0. Poniższy kod przedstawia wyniki konwersji datetime2 wartość smalldatetime wartości.
|
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.
|
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.
- 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);
Zobacz także