Udostępnij za pomocą


DATEPART (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

Funkcja ta zwraca liczbę całkowitą reprezentującą określoną część daty.

Zobacz Typy i funkcje danych daty i godziny (Transact-SQL), aby zapoznać się z omówieniem wszystkich typów danych i funkcji daty i godziny języka Transact-SQL.

Transact-SQL konwencje składni

Składnia

DATEPART ( datepart , date )  

Arguments

datepart
Konkretna część argumentu daty , dla której DATEPART zwróci liczbę całkowitą. W tej tabeli wymieniono wszystkie prawidłowe argumenty elementów datepart .

Uwaga / Notatka

DATEPART nie akceptuje odpowiedników zmiennych zdefiniowanych przez użytkownika dla argumentów datepart .

datepart Abbreviations
rok yy, yyyy
ćwiartka qq, q
miesiąc mm, m
dayofyear dy, y
dzień dd, d
tydzień WK, WW
Rozkład Dw
godzina hh
minuta mi, n
sekunda SS, S
milisekunda Ms
mikrosekundy Mcs
Nanosekund Ns
tzoffset TZ
iso_week isowk, isoww

date
Wyrażenie, które rozwiązuje się do jednego z następujących typów danych:

  • date
  • datetime
  • datetimeoffset
  • datetime2
  • smalldatetime
  • time

W przypadku datyDATEPART zaakceptuje wyrażenie kolumny, wyrażenie, literał ciągu lub zmienną zdefiniowaną przez użytkownika. Użyj czterocyfrowych lat, aby uniknąć problemów z niejednoznacznością. Aby uzyskać informacje o dwóch cyfrowych latach , zobacz Konfigurowanie opcji konfiguracji serwera o dwóch cyfrach.

Zwracany typ

int

Wartość zwracana

Każdy element datepart i jego skróty zwracają tę samą wartość.

Wartość zwrotna zależy od środowiska językowego ustawionego przy użyciu SET LANGUAGE oraz od opcji konfiguracji serwera Configure the default language (Konfiguruj domyślny język Server Configuration w logincie). Wartość zwrotu zależy od SET DATEFORMAT, jeśli date jest literalem ciągu w niektórych formatach. USTAW DATEFORMAT nie zmienia wartości zwrotnej, gdy data jest kolumnowym wyrażeniem typu danych daty lub godziny.

Ta tabela przedstawia wszystkie argumenty datepart , wraz z odpowiadającymi im wartościami zwrotnymi, dla instrukcji SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10'). Argument data ma typ danych datetimeoffset(7). Ostatnie dwie pozycje wartości zwrotnejnanosekundowej części datowej to zawsze 00 i ta wartość ma skalę 9:

.123456700

datepart Wartość zwracana
rok, yyyy, yy 2007
Ćwierćdolarówka, QQ, Q 4
miesiąc, mm, m 10
dayofyear, dy, y 303
Day, DD, D 30
tydzień, tydzień, śwień 44
W dni powszednie, dw 3
godzina, hh 12
minuta, n 15
Po drugie, SS, S 32
Milisekunda, pani 123
Mikrosekunda, MCS 123456
nanosekunda, ns 123456700
Tzoffset, TZ 310
iso_week, Isowk, Isoww 44

Kłótnie o randki w tygodniu i dni powszednie

Dla tygodnia (tydzień, ww) lub dnia powszedniego (dw) dla częściDATEPART datepart zwrot zależy od wartości ustawionej przez SET DATEFIRST.

1 stycznia dowolnego roku definiuje początkowy numer dla części datowejtygodnia. Przykład:

DATEPART (wk, 'Jan 1, xxxx') = 1

gdzie xxxx to dowolny rok.

Ta tabela pokazuje wartość zwrotną dla części daty tygodniowej i dni powszednich dla '2007-04-21' dla każdego argumentu SET DATEFIRST. 1 stycznia 2007 przypada na poniedziałek. 21 kwietnia 2007 przypada na sobotę. Dla amerykańskiego angielskiego,

SET DATEFIRST 7 -- ( Sunday )

To domyślna opcja. Po ustawieniu DATEFIRST, użyj tego sugerowanego polecenia SQL dla wartości tabeli datepart:

SELECT DATEPART(week, '2007-04-21 '), DATEPART(weekday, '2007-04-21 ')

USTAW DATĘ NAJPIERW

argument
tydzień

Zwracane
Rozkład

Zwracane
1 16 6
2 17 5
3 17 4
4 17 3
5 17 2
6 17 1
7 16 7

rok, miesiąc i dzień, datapart Argumenty

Wartości zwracane dla DATEPART (rok, data), DATEPART (miesiąc, data) i DATEPART (dzień, data) są takie same jak te zwracane przez funkcje YEAR,MONTH i DAY.

iso_week datepart

ISO 8601 zawiera system tygodniowo-datowy ISO, czyli system numeracji tygodni. Każdy tydzień związany jest z rokiem, w którym przypada czwartek. Na przykład tydzień 1 2004 roku (2004W01) obejmował poniedziałek, 29 grudnia 2003 do niedzieli, 4 stycznia 2004. Kraje/regiony europejskie zazwyczaj stosują ten styl numeracji. Kraje/regiony spoza Europy zazwyczaj go nie używają.

Uwaga: najwyższy numer tygodnia w roku może wynosić 52 lub 53 dni.

Systemy numeracji różnych krajów/regionów mogą nie spełniać standardu ISO. Ta tabela pokazuje sześć możliwości:

Pierwszy dzień tygodnia Pierwszy tydzień roku zawiera Tygodnie przydzielone dwa razy Używane przez/w
Niedziela 1 stycznia,

Pierwsza sobota,

1-7 dni w roku
Tak Stany Zjednoczone
Poniedziałek 1 stycznia,

Pierwsza niedziela,

1-7 dni w roku
Tak Większość Europy i Wielka Brytania
Poniedziałek 4 stycznia,

Pierwszy czwartek,

4-7 dni w roku
Nie. ISO 8601, Norwegia i Szwecja
Poniedziałek 7 stycznia,

Pierwszy poniedziałek,

Siedem dni w roku
Nie.
Środa 1 stycznia,

Pierwszy wtorek,

1-7 dni w roku
Tak
Sobota 1 stycznia,

Pierwszy piątek,

1-7 dni w roku
Tak

tzoffset

DATEPART Zwraca wartość tzoffset (tz) jako liczbę minut (podpisanych). To zdanie zwraca przesunięcie strefy czasowej wynoszące 310 minut:

SELECT DATEPART (tzoffset, '2007-05-10  00:00:01.1234567 +05:10');  

DATEPART Wartość tzoffset jest renderowana następująco:

  • Dla datetimeoffset i datetime2, tzoffset zwraca przesunięcie czasowe w minutach, podczas gdy przesunięcie dla datetime2 zawsze wynosi 0 minut.
  • Dla typów danych, które mogą niejawnie przekształcać się na datetimeoffset lub datetime2, DATEPART zwraca przesunięcie czasowe w minutach. Wyjątek: inne typy danych dat/godzin.
  • Parametry wszystkich innych typów powodują błąd.

smalldatetimetime Argument

Dla wartości DATEPARTlittledatetimezwraca się sekundy jako 00.

Domyślnie zwrócone dla datepart Który nie znajduje się w argumentze daty

Jeśli typ danych argumentu daty nie ma określonego datepartu, domyślny zwróci dla tej części tylko wtedy, DATEPART gdy literal jest określony dla date.

Na przykład domyślny rok-miesiąc-dzień dla dowolnego typu danych datowych to 1900-01-01. To zdanie zawiera argumenty date part dla datepart, argument time dla date i zwraca 1900, 1, 1, 1, 2.

SELECT DATEPART(year, '12:10:30.123')  
    ,DATEPART(month, '12:10:30.123')  
    ,DATEPART(day, '12:10:30.123')  
    ,DATEPART(dayofyear, '12:10:30.123')  
    ,DATEPART(weekday, '12:10:30.123');  

Jeśli data jest podana jako kolumna zmiennej lub tabeli, a typ danych dla tej zmiennej lub kolumny nie zawiera określonej części daty, DATEPART zwróci się błąd 9810. W tym przykładzie zmienna @t ma typ danych czasowych . Przykład nie jest zaliczony, ponieważ data część roku jest nieprawidłowa dla typu danych czasowych :

DECLARE @t time = '12:10:30.123';   
SELECT DATEPART(year, @t);  

Ułamki sekund

Te stwierdzenia pokazują, że zwraca DATEPART ułamkowe sekundy:

SELECT DATEPART(millisecond, '00:00:01.1234567'); -- Returns 123  
SELECT DATEPART(microsecond, '00:00:01.1234567'); -- Returns 123456  
SELECT DATEPART(nanosecond,  '00:00:01.1234567'); -- Returns 123456700  

Uwagi

DATEPART można użyć w liście select, WHERE, HAVING, GROUP BY oraz ORDER BY.

DATEPART domyślnie odlewa literale ciągów jako typ datetime2 w SQL Server 2008 (10.0.x) i późniejszych. Oznacza to, że DATENAME nie obsługuje formatu YDM, gdy data jest przekazywana jako ciąg znaków. Aby użyć formatu YDM, należy jawnie rzutować ciąg na typ datetime lub smalldatetime .

Przykłady

Ten przykład zwraca rok bazowy. Rok bazowy pomaga w obliczaniu dat. W przykładzie liczba określa datę. Zauważ, że SQL Server interpretuje 0 jako 1 stycznia 1900 roku.

SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);  

-- Returns: 1900    1    1 

Ten przykład zwraca część dnia w dacie 12/20/1974.

-- Uses AdventureWorks  
  
SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer;  

-- Returns: 20

Ten przykład zwraca rok w części daty 12/20/1974.

-- Uses AdventureWorks  
  
SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer;  

-- Returns: 1974

Zobacz także

CAST and CONVERT (Transact-SQL)DATETRUNC