Від автора: сьогодні ми поговоримо про те, як працюють в SQL функції дати. У наступній таблиці наведено список всіх важливих функцій, пов’язаних з датою і часом, які доступні. Існують і інші, підтримувані різними СУБД. Даний список є функції, доступні в СУБД MySQL.
ADDDATE(). Додає дати
ADDTIME(). Додає час
CONVERT_TZ(). Перетворює з одного часового поясу в інший
CURDATE(). Повертає поточну дату
CURRENT_DATE(), CURRENT_DATE. Синоніми для CURDATE()
CURRENT_TIME(), CURRENT_TIME. Синоніми для CURTIME()
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP. Синоніми для NOW()
CURTIME(). Повертає поточний час
DATE_ADD(). Складає дві дати
DATE_FORMAT(). Задає потрібний формат дати
DATE_SUB(). Віднімає одну дату з іншої
DATE(). Витягує частина, що відноситься до дати, з виразу представляє дату або час і дату
DATEDIFF(). Віднімає одну дату з іншої
DAY(). Синонім для DAYOFMONTH()
DAYNAME(). Повертає день тижня
DAYOFMONTH(). Повертає день місяця (1-31)
DAYOFWEEK(). Повертає індекс дні тижня аргументу
DAYOFYEAR(). Повертає номер дня в році (1-366)
EXTRACT. Витягує частина, що відноситься до дати
FROM_DAYS(). Перетворює номер дня в дату
FROM_UNIXTIME(). Форматує дату як тимчасову мітку UNIX
HOUR(). Витягує годину
LAST_DAY. Повертає останній день місяця для аргументу
LOCALTIME(), LOCALTIME. Синонім для NOW()
LOCALTIMESTAMP, LOCALTIMESTAMP (). Синонім для NOW()
MAKEDATE(). Створює дату із року і дня року
MAKETIME. MAKETIME(). MICROSECOND(). Повертає мікросекунди з аргументу
MINUTE(). Повертає хвилини з аргументу
MONTH(). Повернення місяця з дати
MONTHNAME(). Повертає назву місяця
NOW(). Повертає поточну дату і час
PERIOD_ADD(). Додає період до року-місяцю
PERIOD_DIFF(). Повертає кількість місяців між періодами
QUARTER(). Повертає квартал з аргументу
SEC_TO_TIME(). Перетворює секунди в формат «HH: MM: SS»
SECOND(). Повертає секунди (0-59)
STR_TO_DATE(). Перетворює рядок у дату
SUBDATE(). При виклику з трьома аргументами синонім DATE_SUB()
SUBTIME(). Віднімає час
SYSDATE(). Повертає час виконання функції
TIME_FORMAT(). Задає формат часу
TIME_TO_SEC(). Повертає аргумент, перетворений в секунди
TIME(). Витягує частина, що відноситься до часу, переданого вираження
TimeDiff(). Віднімає час
TIMESTAMP(). З одним аргументом ця функція повертає вираз дати або дати і часу. З двома аргументами — складає ці два аргументи
TIMESTAMPADD(). Додає інтервал до висловом дати і часу
TIMESTAMPDIFF(). Віднімає інтервал з виразу дати і часу
TO_DAYS(). Повертає аргумент дати, перетворений у дні
UNIX_TIMESTAMP(). Повертає тимчасову мітку UNIX
UTC_DATE(). Повертає поточну дату UTC
UTC_TIME(). Повертає поточний час UTC
UTC_TIMESTAMP(). Повертає поточну дату і час UTC
WEEK(). Повертає номер тижня
WEEKDAY(). Повертає індекс дні тижня
WEEKOFYEAR(). Повертає календарний номер тижня (1-53)
YEAR(). Повертає рік
YEARWEEK(). Повертає рік і тиждень
ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)
При виклику з другим аргументом, заданим у вигляді INTERVAL, функція ADDDATE() є синонімом DATE_ADD(). Пов’язана функція SUBDATE() є синонімом DATE_SUB(). Інформацію про аргумент блоку INTERVAL див. у розділі DATE_ADD().
При виклику з другим аргументом, заданим в днях, MySQL розглядає це як ціле число днів для додавання в вираз.
ADDTIME(expr1,expr2)
ADDTIME () додає expr2 до expr1 та повертає результат. Expr1 є вираженням часу або дати і часу, в той час як expr2 є вираженням часу.
CONVERT_TZ(dt,from_tz,to_tz)
Перетворює значення дати і часу dt з часового поясу, заданого в from_tz, в часовий пояс у to_tz, і повертає отримане значення. Ця функція повертає NULL, якщо аргументи недійсні.
CURDATE()
Повертає поточну дату як значення в форматі YYYY-MM-DD» або YYYYMMDD, в залежності від того, чи використовується ця функція у строковому або в числовому контексті.
CURRENT_DATE і CURRENT_DATE()
CURRENT_DATE і CURRENT_DATE() є синонімами для CURDATE()
CURTIME()
Повертає поточний час як значення в форматі HH: MM: SS» або HHMMSS, залежно від того, використовується функція у строковому або в числовому контексті. Значення виражається для поточного часового поясу.
CURRENT_TIME і CURRENT_TIME()
CURRENT_TIME і CURRENT_TIME() є синонімами для CURTIME().
CURRENT_TIMESTAMP і CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP і CURRENT_TIMESTAMP() є синонімами для NOW().
DATE(expr)
Витягує частина, що відноситься до дати, з виразу дати або дати і часу expr.
DATEDIFF(expr1,expr2)
DATEDIFF() повертає expr1.expr2, виражене як кількість днів між двома датами. І expr1, і expr2 є виразами дати або дати і часу. У розрахунках використовуються лише частини відносяться до дати.
DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)
Ці функції виконують арифметичні операції з датами. date представлено як значення DATETIME або DATE, вказує початкову дату. expr являє собою вираз, який визначає значення інтервалу, який потрібно додати або відняти з початкової дати. expr — це рядок; вона може починатися з « – для негативних інтервалів.
unit є ключовим словом, вказуючим одиниці вимірювання для вираження. Ключове слово INTERVAL і позначення одиниць не чутливі до регістру. В наступній таблиці показано очікувана форма аргументу expr для кожного значення одиниці вимірювання.
Значення QUARTER і WEEK доступні в MySQL, починаючи з версії 5.0.0.
DATE_FORMAT (date format)
Ця команда задає формат значення date відповідно до зазначеної рядком format. У рядку format можуть використовуватися наступні покажчики. Перед покажчиками формату необхідно додавати символ ‘%’.
%a. Скорочена назва дня тижня (Sun..Sat)
%b. Скорочена назва місяця (Jan..Dec)
%с. Числове позначення місяці (0…12)
%D. День місяця з англійським суфіксом (0, 1, 2, 3,.)
%d. Числове позначення дня місяця (00..31)
%е. Числове позначення дня місяця (00..31)
%f. Мікросекунди (000000..999999)
%H. Годину (00..23)
%h. Година (01..12)
%I. Годину (01..12)
%i. Числове позначення хвилин (00..59)
%J. День року (001..366)
%k. Година (0..23)
%l. Годину (1..12)
%M. Назва місяця (January..December)
%м. Числове позначення місяця (00..12)
%р. AM або PM
%r. Час, 12-годинний формат (чч: мм: сс, за яким слідують AM або PM)
%S. Секунди (00..59)
%s. Секунди (00..59)
%Т. Час, 24-годинний формат (чч: мм: сс)
%U. Тиждень (00..53), де неділю — перший день тижня
%u. Тиждень (00..53), де понеділок — перший день тижня
%V. Тиждень (01..53), де неділю — перший день тижня; використовується разом з %X
%v. Тиждень (01..53), де понеділок — перший день тижня; використовується разом з %x
%W. Назву дня тижня (Sunday..Saturday)
%w. День тижня (0=Sunday..6=Saturday)
%X. Рік для тижні, де перший день тижня — неділя, число з чотирьох цифр; використовується разом з %V
%x. Рік для тижні, де перший день тижня — понеділок, число з чотирьох цифр; використовується разом з %V
%Y. Рік, число, чотири цифри
%y. Числове позначення року (дві цифри)
%%. Буквально символ %
%x. x, для всіх .x., не перерахованих вище
DATE_SUB(date,INTERVAL expr unit)
Аналогічно функції DATE_ADD ().
DAY(date)
DAY() є синонімом функції DAYOFMONTH().
DAYNAME(date)
Повертає день тижня для вказаної дати.
DAYOFMONTH(date)
Повертає день місяця для вказаної дати в діапазоні від 0 до 31.
DAYOFWEEK(date)
Повертає індекс дня тижня (1 = Sunday, 2 = Monday, ., 7 = Saturday). Ці значення індексу відповідають стандарту ODBC.
DAYOFYEAR(date)
Повертає день року для вказаної дати в діапазоні від 1 до 366.
EXTRACT(unit FROM date)
Функція EXTRACT() використовує ті ж типи покажчиків одиниць вимірювання, що і DATE_ADD() або DATE_SUB(), але не виконує арифметичні операції з датами, а витягує з дати частина відноситься до покажчика одиниць вимірювання.
FROM_DAYS(N)
Повертається значення DATE з урахуванням кількості днів N.
Примітка. Використовуйте FROM_DAYS() для старих дат обережно. Функція не призначена для роботи із значеннями дат до введення григоріанського календаря (1582).
FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)
Повертає подання аргументу unix_timestamp як значення в форматі YYYY-MM-DD HH: MM: SS або YYYYMMDDHHMMSS» в залежності від того, чи використовується ця функція у строковому або в числовому контексті. Значення виражається в поточному часовому поясі. Параметр unix_timestamp є внутрішнім значенням мітки часу, що створюється функцією UNIX_TIMESTAMP().
Якщо format зазначено, результат форматується згідно з рядком format, яка використовується так само, як описано в розділі DATE_FORMAT().
HOUR(time)
Повертає годинник з зазначеного часу. Діапазон повертається значення становить від 0 до 23. Однак діапазон значень TIME насправді набагато більше, тому HOUR може повертати значення, що перевищують 23.
LAST_DAY(date)
Приймає значення дати або дати і часу і повертає значення, відповідне останнього дня місяця. Повертає NULL, якщо аргумент недійсний.
LOCALTIME і LOCALTIME()
LOCALTIME і LOCALTIME() є синонімами для NOW().
LOCALTIMESTAMP і LOCALTIMESTAMP()
LOCALTIMESTAMP і LOCALTIMESTAMP() є синонімами для NOW().
MAKEDATE(year,dayofyear)
Повертає значення заданого року і дня року. Значення dayofyear повинно бути більше 0 або результат буде NULL.
MAKETIME(hour,minute,second)
Повертає значення часу, розраховане з аргументів hour, minute і second.
MICROSECOND(expr)
Повертає мікросекунди з виразу часу або вираження datetime(expr) у вигляді числа в діапазоні від 0 до 999999.
MINUTE(time)
Повертає хвилини для зазначеного часу, в діапазоні від 0 до 59.
MONTH(date)
Повертає місяць зазначеної дати в діапазоні від 0 до 12.
MONTHNAME(date)
Повертає повну назву місяця для вказаної дати.
NOW()
Повертає поточну дату і час як значення в форматі YYYY-MM-DD HH: MM: SS» або YYYYMMDDHHMMSS, залежно від того, використовується функція у строковому або числовому контексті. Це значення виражається в поточному часовому поясі.
PERIOD_ADD(P,N)
Додає N місяців до періоду P (у форматі YYMM або YYYYMM). Повертає значення в форматі YYYYMM. Зверніть увагу, що аргумент періоду P не є значенням дати.
PERIOD_DIFF(P1,P2)
Повертає кількість місяців між періодами P1 і P2. Періоди P1 і P2 повинні вказуватися у форматі YYMM або YYYYMM. Зверніть увагу, що аргументи періодів P1 і P2 не є значеннями дати.
QUARTER(date)
Повертає квартал року для вказаної дати в діапазоні від 1 до 4.
SECOND(time)
Повертає значення секунд часу в діапазоні від 0 до 59.
SEC_TO_TIME(seconds)
Повертає аргумент seconds, перетворений в години, хвилини і секунди у форматі HH: MM: SS» або HHMMSS, залежно від того, використовується функція у строковому або числовому контексті.
STR_TO_DATE(str,format)
Це инверсивная функція до функції DATE_FORMAT(). Вона приймає рядок str і рядок формату format. Функція STR_TO_DATE() повертає значення DATETIME, якщо рядок формату містить дату і час. В іншому випадку вона повертає значення DATE або TIME, якщо рядок містить лише дату або час.
SUBDATE(date,INTERVAL expr unit) і SUBDATE(expr,days)
Якщо SUBDATE() викликається з другим аргументом, заданим у вигляді INTERVAL, функція є синонімом DATE_SUB(). Інформацію про аргумент INTERVAL дивіться у розділі DATE_ADD().
SUBTIME(expr1,expr2)
Функція SUBTIME() повертає expr1. expr2 виражається як значення в тому ж форматі, що і expr1. Значення expr1 є вираженням часу або дати і часу, а значення expr2 є вираженням часу.
SYSDATE()
Повертає поточну дату і час як значення в форматі YYYY-MM-DD HH: MM: SS» або YYYYMMDDHHMMSS, залежно від того, використовується функція у строковому або в числовому контексті.
TIME(expr)
Витягує частина, що відноситься до часу, вираз expr і повертає його у вигляді рядка.
TIMEDIFF(expr1,expr2)
Функція TIMEDIFF() повертає expr1 . expr2 виражається як значення часу. Значення expr1 і expr2 являють собою вираження часу або дати і часу, але обидва вони повинні бути одного типу.
TIMESTAMP (expr), TIMESTAMP (expr1, expr2)
З одним зазначеним аргументом ця функція повертає вираз дати або дати і часу expr, як значення дати і часу. З двома аргументами вона додає вираз часу expr2 до висловом дати або дати і часу expr1 і повертає результат як значення дати і часу.
TIMESTAMPADD(unit,interval,datetime_expr)
Ця функція додає ціле вираз interval до висловом дати або часу datetime_expr. Одиниці вимірювання інтервалу задаються аргументом unit, який може приймати одне з наступних значень:
FRAC_SECOND
SECOND, MINUTE
HOUR, DAY
WEEK
MONTH
QUARTER or
YEAR
Значення unit може бути зазначено з використанням одного з ключових слів, як було показано вище, або з префіксом SQL_TSI_. Наприклад, DAY і SQL_TSI_DAY є дійсними значеннями.
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Повертає цілочисельну різницю між виразами дати або дати і часу datetime_expr1 і datetime_expr2. Одиниці вимірювання результату задаються аргументом unit. Дійсними для аргументу unit є ті ж значення, які були перераховані в описі функції TIMESTAMPADD().
TIME_FORMAT(time format)
Ця функція використовується так само, як і функція DATE_FORMAT(), але рядок format може містити покажчики формату тільки для годин, хвилин і секунд.
Якщо значення часу містить частину, що відноситься до годинника, яка більше 23, покажчики формату годин %H %k дають значення, більше, ніж звичайний діапазон від 0 до 23. Інші покажчики формату годин дають значення години 12 по модулю.
TIME_TO_SEC(time)
Повертає аргумент time, перетворений в секунди.
TO_DAYS(date)
Повертає номер дні (кількість днів з 0-го року) для заданої дати date.
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
Якщо ця функція викликається без аргументів, вона повертає тимчасову мітку Unix (секунди з «1970-01-01 00:00:00» UTC), як ціле позитивне число. Якщо UNIX_TIMESTAMP() викликається з аргументом date, вона повертає значення аргументу, виражене у секундах з «1970-01-01 00:00:00» UTC. date може бути рядком DATE рядком DATETIME, TIMESTAMP або числом у форматі YYMMDD або YYYYMMDD.
UTC_DATE, UTC_DATE()
Повертає поточну дату UTC як значення в форматі YYYY-MM-DD» або YYYYMMDD, в залежності від того, чи використовується ця функція у строковому або числовому контексті.
UTC_TIME, UTC_TIME()
Повертає поточний час UTC як значення в форматі HH: MM: SS» або HHMMSS, залежно від того, використовується функція у строковому або числовому контексті.
UTC_TIMESTAMP, UTC_TIMESTAMP()
Повертає поточну дату і час UTC як значення «YYYY-MM-DD HH: MM: SS» або у форматі YYYYMMDDHHMMSS, в залежності від того, чи використовується ця функція у строковому або в числовому контексті.
WEEK(date[,режим])
Ця функція повертає номер тижня для вказаної дати date. Форма WEEK() з двома аргументами дозволяє вказати, чи буде тиждень починатися в неділю або в понеділок, і чи має значення, що повертається перебувати в діапазоні від 0 до 53 або від 1 до 53. Якщо аргумент mode вказано, використовується значення системної змінної default_week_format
WEEKDAY(date)
Повертає індекс дня тижня для вказаної дати date (0 = понеділок, 1 = вівторок, 6 = неділю).
WEEKOFYEAR(date)
Повертає календарну тиждень для заданої дати date як число в діапазоні від 1 до 53. WEEKOFYEAR() — це функція сумісності, еквівалентна WEEK(date,3).
YEAR(date)
Повертає рік для заданої дати date в діапазоні від 1000 до 9999 або 0 для дати .zero.
YEARWEEK(date), YEARWEEK(date,mode)
Повертає рік і тиждень для заданої дати date. Параметр mode працює точно так само, як аргумент mode для функції WEEK(). Рік у результаті може відрізнятися від року в аргументі дати першого і останнього тижня року.
Примітка. Номер тижня відрізняється від того, що поверне функція WEEK() (0) для необов’язкових аргументів 0 або 1, так як WEEK() поверне тиждень в контексті даного року.