DATEPART (Transact-SQL)
Ця функція повертає ціле число, яке представляє вказану частину datepart заданого типу date.
Огляд усіх типів даних та функцій дати та часу у мові Transact-SQL див. у статті Типи даних та функції дати та часу (Transact-SQL).
Синтаксис
DATEPART ( datepart , date )
Аргументи
datepart
Певна частина аргументу date, для якого функція DATEPART поверне значення типу integer. У наведеній нижче таблиці перераховані всі допустимі аргументи datepart.
DATEPART не приймає еквівалентні змінні, що визначаються користувачем, для аргументів datepart.
| datepart |
Abbreviations |
| year |
yy, yyyy |
| quarter |
qq, q |
| month |
mm, m |
| dayofyear |
dy, y |
| day |
dd, d |
| week |
wk, ww |
| weekday |
dw |
| hour |
hh |
| minute |
mi, n |
| second |
ss, s |
| millisecond |
ms |
| microsecond |
mcs |
| nanosecond |
ns |
| tzoffset |
tz |
| iso_week |
isowk, isoww |
date
Вираз, який дозволяється в один із таких типів даних:
Для date DATEPART прийматиме стовпець виразу, вираз, строковий літерал або змінну, що визначається користувачем. Щоб уникнути неоднозначності, використовуйте чотиризначний запис року.
Тип даних, що повертаються
INT
Значення, що повертається
Кожен вираз datepart і його короткі форми повертають те саме значення.
Значення, що повертається, залежить від мови середовища, що задається інструкцією SET LANGUAGE, і від параметра конфігурації сервера "мову за промовчанням" для імені входу. date є рядковим літералом деякого формату, то значення, що повертається, залежить від функції SET DATEFORMAT.
Нижче наведено таблицю відповідності аргументів функції datepart та значень, повернутих виразом SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10') . Аргумент date має тип даних datetimeoffset(7). Останні дві позиції значення, що повертається функцією nanosecond
datepart, завжди 00 . Масштаб цього значення 9.
.123456700
| datepart |
Значення, що повертається |
| year, yyyy, yy |
2007 |
| quarter, qq, q |
4 |
| month, mm, m |
10 |
| dayofyear, dy, y |
303 |
| day, dd, d |
30 |
| week, wk, ww |
44 |
| weekday, dw |
3 |
| hour, hh |
12 |
| minute, n |
15 |
| second, ss, s |
32 |
| millisecond, ms |
123 |
| microsecond, mcs |
123456 |
| nanosecond, ns |
123456700 |
| tzoffset, tz |
310 |
| iso_week, isowk, isoww |
44 |
Аргументи функції datepart, що містять інформацію про номер тижня та дня
Для week (wk, ww) або weekday (dw) datepart значення DATEPART, що повертається, залежить від значення, заданого функцією SET DATEFIRST.
1 січня будь-якого року визначає початкове число для компонента дати week
datepart. Наприклад:
DATEPART (wk, 'Jan 1, xxxx') = 1,
де xxxx - Щороку.
У цій таблиці представлені значення параметрів, що повертаються. week і weekday
datepart для дати 21.04.2007 із кожним аргументом функції SET DATEFIRST. 1 січня 2007 р. посідає понеділок. 21 квітня 2007 р. припадає на суботу. Для англійської мови США,
SET DATEFIRST 7 - (Sunday)
SET DATEFIRST 7 (неділя). Після завдання DATEFIRST використовуйте пропоновану інструкцію SQL для табличних значень datepart:
SELECT DATEPART(week, '2007-04-21'), DATEPART(weekday, '2007-04-21')
Аргументи функції datepart, що відображають рік, місяць та день дати
Значення, що повертаються в результаті виконання інструкцій DATEPART (year, date), DATEPART (month, date) та DATEPART (day, date), збігаються з результатами виконання функцій YEAR, MONTH та DAY, відповідно.
iso_week datepart
Стандарт ISO 8601 включає систему відліку днів і тижнів ISO. Щотижня приписується тому році, в якому перебуває її четвер. Наприклад, перший тиждень 2004 року (2004W01) зважає на понеділок 29 грудня 2003 р.по неділю 4 січня 2004 р. Європейські країни чи регіони зазвичай використовують цей стиль нумерування. Неєвропейські країни та регіони зазвичай не використовують його.
Примітка. Найбільша кількість тижнів на рік може становити 52 чи 53.
Система відліку тижнів у різних країнах та регіонах може не співпадати зі стандартом ISO. У таблиці нижче наведено шість можливих варіантів.
| Перший день тижня |
Зміст першого тижня року |
Подвійне присвоєння тижнів |
Застосовується в: |
| Неділя |
1 січня, |
tzoffset
DATEPART повертає значення tzoffset (tz) як кількість хвилин (зі знаком). В результаті виконання цієї інструкції повертається усунення часового поясу 310 хвилин:
SELECT DATEPART (tzoffset, '2007-05-10 00:00:01.1234567 +05:10');
Функція DATEPART відображає значення tzoffset, як описано нижче.
- Для datetimeoffset і datetime2 значення tzoffset повертає тимчасове усунення в хвилинах, причому для datetime2 усунення завжди дорівнює 0 хвилин.
- Для типів даних, які можуть бути неявно перетворені на datetimeoffset або datetime2, функція DATEPART повертає тимчасове усунення в хвилинах. Для інших типів дати та часу цього не відбувається.
- Для параметрів інших типів повертається помилка.
Аргумент дати типу maldatetime
Для значення date Типом незначногочасу функція DATEPART повертає кількість секунд 00.
Повертається значення за промовчанням для аргументу функції datepart, який відрізняється від дати
Якщо тип даних аргументу date не містить зазначеної частини datepart, функція DATEPART поверне значення за промовчанням для цієї частини datepart, тільки якщо для date вказано літерал.
Наприклад, значення "рік-місяць-день" за промовчанням для будь-якого типу даних date одно 1900-01-01. Наведена нижче інструкція містить аргументи компонентів дати для datepart, аргумент часу для date та повертає 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(weekday, '12:10:30.123');
Якщо аргумент date вказаний як змінна або стовпець таблиці та тип даних цієї змінної або стовпця не містить зазначеної частини datepart, функція DATEPART повертає помилку 9810. У цьому прикладі змінна @t має тип даних time. Цей приклад завершується помилкою, тому що рік дати не є допустимим для типу даних time:
DECLARE @t time = '12:10:30.123'; SELECT DATEPART(year, @t);
Частки секунди
Ці інструкції показують, що функція DATEPART повертає частки секунди:
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
Зауваження
Функція DATEPART може використовуватись у пропозиціях вибору зі списку, WHERE, HAVING, GROUP BY та ORDER BY.
DATEPART неявно наводить рядкові літерали як типу datetime2 у SQL Server 2008 (10.0.x) та пізніших версій. Це означає, що DATENAME не підтримує формат ГЧМ (рік, число, місяць) під час передачі дати у вигляді рядка. Для використання формату ГЧМ (рік, число, місяць) необхідно привести рядок до типу datetime або smalldatetime.
Приклади
У цьому прикладі повертається базовий рік. Його значення використовується при розрахунках, пов'язаних із датами. У прикладі дату вказано як число. Зверніть увагу, що SQL Server інтерпретує 0 з 1 січня 1900 року.
SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0); -- Returns: 1900 1 1
У наведеному прикладі повертається частина дати 12/20/1974 , що представляє день.
-- Uses AdventureWorks SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer; -- Returns: 20
У наведеному нижче прикладі повертається частина дати 12/20/1974, що становить рік.
-- Uses AdventureWorks SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer; -- Returns: 1974
Функція MONTH
Функція MONTH отримує номер місяця з дати. Дата може бути у форматі date або datetime.
Синтаксис
Таблиці для прикладів
таблиця users id гайді |
name ім'я |
date дата народження |
| 1 |
user1 |
1988-03-01 |
| 2 |
user2 |
1989-04-02 |
| 3 |
user3 |
1990-05-03 |
приклад
У цьому прикладі під час вибірки з таблиці з дати витягується номер місяця:
Результат виконання коду:
id гайді |
name ім'я |
date дата |
month місяць |
| 1 |
user1 |
1988-03-01 |
3 |
| 2 |
user2 |
1989-04-02 |
4 |
| 3 |
user3 |
1990-05-03 |
5 |
Дивіться також
- функцію MONTHNAME ,
яка повертає назву місяця англійською
- функцію DAY,
яка отримує день з дати
- функцію YEAR,
яка отримує рік з дати
- функцію DATE,
яка отримує дату з дати-часу