Sdílet prostřednictvím


DATEPART (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

Tato funkce vrací celé číslo reprezentující specifikovanou datovou částdaného data.

Přehled všech datových typů a funkcí jazyka Transact-SQL najdete v tématu Datové typy a funkce data a času jazyka Transact-SQL .

Transact-SQL konvence syntaxe

Syntaxe

DATEPART ( datepart , date )  

Arguments

datepart
Konkrétní část argumentu data , pro kterou DATEPART vrátí celé číslo. Tato tabulka obsahuje všechny platné argumenty části kalendářních dat.

Poznámka:

DATEPART nepřijímá uživatelsky definované ekvivalenty proměnných pro argumenty datepart .

datepart Abbreviations
rok yyy, yyyyy
čtvrt Qq, q
měsíc Mm, m
denofyear dy, y
den dd, d
týden Wk, WW
všední den Dw
hodina hh
minuta MI, N
vteřina SS, S
milisekunda milisekunda
mikrosekunda Mcs
nanosekunda Ns
tzoffset TZ
iso_week Isowk, Isoww

date
Výraz, který se rozlišuje na jeden z následujících datových typů:

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

Pro datumDATEPART přijme výraz sloupce, výraz, řetězcový literál nebo uživatelsky definovanou proměnnou. Vyhnete se problémům s nejednoznačností pomocí čtyřmístných let. Informace o dvouciferných letech najdete v tématu Konfigurace dvouciferného roku konfigurace serveru .

Návratový typ

int

Návratová hodnota

Každá část data a její zkratky vrátí stejnou hodnotu.

Návratová hodnota závisí na nastavení jazykového prostředí pomocí SET LANGUAGE a na možnosti konfigurace serveru Konfigurovat výchozí jazyk při přihlašování. Návratová hodnota závisí na SET DATEFORMAT, pokud je datum řetězcovým literálem některých formátů. NASTAVIT DATEFORMAT nemění vrácenou hodnotu, pokud je datum sloupcovým výrazem datového nebo časového typu.

Tato tabulka uvádí všechny argumenty datepart s odpovídajícími návratovými hodnotami pro tvrzení SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10'). Argument data má datový typ datetimeoffset(7). Poslední dvě pozice hodnoty návratu datové částiv nanosekundách jsou vždy 00 a tato hodnota má škálu 9:

.123456700

datepart Návratová hodnota
rok, yyyy, yy 2007
Čtvrt, QQ, Q 4
měsíc, mm, m 10
dayofyear, dy, y 303
Day, DD, D 30
týden, týdne, týdně 44
Všední den, dw 3
Hodina, hh 12
Minuta, N 15
Druhý, SS, S 32
Milisekunda, paní 123
mikrosekunda, MCS 123456
nanosekunda, ns 123456700
Tzoffset, TZ 310
iso_week, Isowk, Isoww 44

Hádky o týdních a všední dny

Pro týdenní (týdne, ww) nebo všední dny (dw) část data závisí návratová DATEPART hodnota na hodnotě nastavené pomocí SET DATEFIRST.

1. ledna každého roku určuje počáteční číslo pro týdenní datovou část. Například:

DATEPART (wk, '1. ledna, xxxx') = 1

kde xxxx je libovolný rok.

Tato tabulka ukazuje návratovou hodnotu pro týdenní a pracovní dny datepart pro '2007-04-21' pro každý argument SET DATEFIRST. 1. ledna 2007 připadá na pondělí. 21. dubna 2007 připadá na sobotu. Pro americkou angličtinu,

SET DATEFIRST 7 -- ( Sunday )

slouží jako výchozí nastavení. Po nastavení DATEFIRST použijte tento doporučený SQL příkaz pro hodnoty tabulky datepart:

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

STANOVTE DATUM JAKO PRVNÍ

argument
týden

vrácený
všední den

vrácený
1 16 6
2 17 5
3 17 4
4 17 3
5 17 2
6 17 1
7 16 7

rok, měsíc a den, datum část Argumenty

Hodnoty vrácené pro DATEPART (rok, datum), DATEPART (měsíc, datum) a DATEPART (den, datum) jsou stejné jako hodnoty funkcí YEAR,MONTH a DAY.

iso_week Datepart

ISO 8601 zahrnuje systém ISO týden-datum, což je číslovací systém pro týdny. Každý týden je spojen s rokem, kdy čtvrtek připadá. Například první týden roku 2004 (2004W01) pokrýval pondělí 29. prosince 2003 až neděli 4. ledna 2004. Evropské země/regiony obvykle používají tento styl číslování. Neevropské země/regiony ho obvykle nepoužívají.

Poznámka: nejvyšší týdenní číslo v roce může být buď 52, nebo 53.

Číslovací systémy různých zemí/regionů nemusí odpovídat standardu ISO. Tato tabulka ukazuje šest možností:

První den týdne První týden roku obsahuje Týdny přidělené dvakrát Používáno/v
Neděle 1. ledna,

První sobota,

1–7 dní v roce
Ano USA
Pondělí 1. ledna,

První neděle,

1–7 dní v roce
Ano Většina Evropy a Spojené království
Pondělí 4. ledna,

První čtvrtek,

4–7 dní v roce
Ne ISO 8601, Norsko a Švédsko
Pondělí 7. ledna,

První pondělí,

Sedm dní v roce
Ne
Středa 1. ledna,

První úterý,

1–7 dní v roce
Ano
Sobota 1. ledna,

První pátek,

1–7 dní v roce
Ano

tzoffset

DATEPART vrací hodnotu tzoffset (tz) jako počet minut (podepsaných). Tento výrok vrací časový posun 310 minut:

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

DATEPART Zobrazuje hodnotu tzoffsetu následovně:

  • Pro datetimeoffset a datetime2 tzoffset vrací časový posun v minutách, zatímco posun pro datetime2 je vždy 0 minut.
  • U datových typů, které lze implicitně převést na datetimeoffset nebo datetime2, DATEPART se časový offset vrací v minutách. Výjimka: jiné datové / časové typy.
  • Parametry všech ostatních typů vedou k chybě.

smalldatetimetime Argument

Pro hodnotu datetime s malým datetime vrací DATEPART sekundy jako 00.

Výchozí vrácení pro datepart, který není v argumentu data

Pokud datový typ argumentu datum nemá specifikovanou datepart, vrátí výchozí hodnotu pro danou část pouze tehdy, DATEPART když je pro datum specifikován literál.

Například výchozí rok-měsíc-den pro jakýkoli datový typ je 1900-01-01. Tento výrok má argumenty date part pro datepart, time argument pro datum a vrací 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');  

Pokud je datum zadáno jako sloupec proměnné nebo tabulky a datový typ pro danou proměnnou nebo sloupec nemá zadanou datovou část, DATEPART vrátí se chyba 9810. V tomto příkladu má proměnná @t časový datový typ. Příklad selhává, protože datum části roku je neplatné pro datový typ času :

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

Zlomky sekund

Tyto výroky ukazují, že vrací DATEPART zlomek sekund:

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  

Poznámky

DATEPART lze použít v seznamu WHERE, HAVE, GROUP BY a ORDER BY.

DATEPART implicitně předává literály řetězců jako typ datetime2 v SQL Server 2008 (10.0.x) a novějších. To znamená, že DATENAME nepodporuje formát YDM, když je datum předáno jako řetězec. Pokud chcete použít formát YDM, musíte řetězec explicitně přetypovat na typ datetime nebo smalldatetime .

Examples

Tento příklad vrací základní rok. Základní rok pomáhá s výpočty dat. V příkladu číslo určuje datum. Všimněte si, že SQL Server interpretuje 0 jako 1. ledna 1900.

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

-- Returns: 1900    1    1 

Tento příklad vrací denní část data 12/20/1974.

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

-- Returns: 20

Tento příklad vrací rok v části data 12/20/1974.

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

-- Returns: 1974

Viz také

CAST and CONVERT (Transact-SQL)DATETRUNC