Sql даты функции: работа с форматами, интервалами и часовыми поясами
текущая дата и другие функции даты в времени
Пример 1. Сформировать список актеров старше 70 лет. Пишем следующий запрос:
SELECT
FName, LName, BirthDate
FROM ACTOR WHERE
TIMESTAMPDIFF(YEAR, BirthDate, CURDATE()) > 70
В этом запросе вычисляется разница между текущей датой CURDATE() и датой рождения
актёра BirthDate, содержащейся в таблице ACTOR. Для вычисления разницы применена функция TIMESTAMPDIFF().
Ключевое слово YEAR — задаёт единицу измерения — в годах интервала между датами. Вычисленное значение и
результат его сравнения с числом 70 вполне
пригодны в качестве условия выборки в секции WHERE. Следует учесть, что функция TIMESTAMPDIFF()
существует лишь в MySQL. В других диалектах SQL для этого есть функция DATEDIFF, а для задания
единицы измерения применяются различные ключевые слова в различных вариантах написания.
Для вычисления разницы дат можно использовать и оператор «минус». Это сделано в следующем примере.
Пример 2. Вывести список актеров, которые не задействованы в новых постановках
(в постановках последних 3 лет). Использовать CURDATE(), NOT IN. Запрос будет следующим:
SELECT fname, lname
FROM actor WHERE
actor_id NOT IN(SELECT actor_id FROM team
WHERE play_id IN(SELECT play_id FROM play
WHERE YEAR(premieredate) — YEAR(CURDATE())
В этом запросе задействована функция YEAR(). Аргументами её являются дата премьеры
постановки premieredate из таблицы play и текущая дата. Для вычисления разницы использован оператор
«минус». Он имеет больший приоритет по сравнению с оператором сравнения и поэтому выполняется первым.
Вычисленнное выражение сравнивается с числом 3 и подходящие значения служат условием выборки из таблицы
play, содержащей данные о постановках. Этот подзапрос — самый глубокий в «матрёшке» целого запроса.
Подзапрос более высокого уровня из таблицы team, содержащей данные о ролях, выбирает идентификаторы актёров,
с помощью предиката IN. Выбираются те актёры, которые участвовали в постановках трёх послежних лет. И,
наконец, самый внешний запрос к таблице actor выбирает значения с отрицанием (NOT IN) значения предыдущего
подзапроса.
Далее — пример использования соединения таблиц, среди которых из одной выбирается дата для вычисления
разницы с текущей датой.
Пример 3. Сформировать список актеров с их стажем (в днях).
Использовать CURDATE(), GROUP BY. Запрос будет следующим:
SELECT DISTINCT
a.Actor_ID, a.FName, a.LName,
CURDATE() — p1.PremiereDate AS ExpDays
FROM Play p1
JOIN
Team t1 ON p1.play_id = t1.play_id
JOIN
Actor a
ON t1.actor_id = a.Actor_id
WHERE t1.ACTOR_ID = a.Actor_ID
ORDER BY ExpDays, a.Actor_ID
DESC
В этом запросе разница между текущей датой CURDATE() и датой премьеры постановки
PremiereDate из таблицы Play вычисляется как имя столбца в результирующей таблице. Поскольку эти даты
имеют один и тот же формат, для вычисления разницы достаточно использовать оператор «минус». Разница
вычислена. Но из таблицы Play невозможно напрямую «достучаться» до таблицы Actor, содержащей данные об
актёрах. Поэтому используем соединение (JOIN) этой таблицы с таблицей Team, которая уже связана с таблицей
Actor при помощи ключа Actor_ID. Соединение таблиц Team и Actor — второе в этой цепочке из трёх таблиц.
Составить SQL запросы с текущей датой самостоятельно, а затем посмотреть решения
CURDATE(), CURRENT_DATE(), CURRENT_DATE — возвращают текущую дату в формате
‘YYYY-MM-DD’ или YYYYDDMM в зависимости от того, вызывается функция в текстовом или числовом контексте.
CURTIME(), CURRENT_TIME(), CURRENT_TIME — возвращают текущее время суток в формате
‘hh-mm-ss’ или hhmmss в зависимости от того, вызывается функция в текстовом или числовом контексте.
NOW() — возвращает текущие дату и время формате
‘YYYY-MM-DD hh:mm:ss’ или YYYYDDMMhhmmss в зависимости от того, вызывается функция в текстовом или числовом контексте.
TIMEDIFF(param1, param2) — возвращает разницу между
значениями времени, заданными параметрами param1 и param2.
DATEDIFF(param1, param2) — возвращает разницу между
датами param1 и param2. Значения param1 и param2 могут иметь типы DATE или DATETIME, а при
вычислении разницы используется лишь часть DATE.
PERIOD_DIFF(param1, param2) — возвращает разницу в месяцах между
датами param1 и param2. Значения param1 и param2 могут быть представлены в числовом формате
YYYYMM или YYMM.
TIMESTAMPDIFF(interval, param1, param2) — возвращает разницу между
значениями датами param1 и param2. Значения param1 и param2 могут быть представлены в форматах
‘YYYY-MM-DD’ или ‘YYYY-MM-DD hh:mm:ss’. Единица измерения разницы задаётся параметром interval. Он может
принимать значения FRAC_SECOND (микросекунды), SECOND (секунды), MINUTE (минуты), HOUR (часы),
DAY (дни), WEEK (недели), MONTH (месяцы), QUARTER (кварталы), YEAR (годы).
ADDDATE(date, INTERVAL value) — возвращает дату, к которой
прибавлено значение value. Ключевое слово INTERVAL обязательно следует в запросе, после него
указывается значение value, а затем единицы измерения прибавляемого значения. Ими могут быть
SECOND (секунды), MINUTE (минуты), HOUR (часы), MINUTE_SECOND (минуты и секунды),
HOUR_MINUTE (часы и минуты), DAY_SECOND (дни, часы минуты и секунды), DAY_MINUTE (дни, часы и минуты),
DAY_HOUR (дни и часы), YEAR_MONTH (годы и месяцы).
SUBDATE(date, INTERVAL value) — вычитает из величины даты date
произвольный временной интервал и возвращает результат. Ключевое слово INTERVAL обязательно следует в запросе, после него
указывается значение value, а затем единицы измерения вычитаемого значения. Возможные единицы измерения —
те же, что и для функции ADDDATE().
SUBTIME(datetime, time) — вычитает из величины времени datetime вида
‘YYYY-MM-DD hh:mm:ss’ произвольно заданное значение времени time и возвращает результат.
PERIOD_ADD(period, N) — добавляет N месяцев к значению
даты period. Значение period должно быть представлено в числовом формате ‘YYYYMM’ или ‘YYMM’.
TIMESTAMPADD(interval, param1, param2) — прибавляет к дате и времени
суток param2 в полном или кратком формате временной интервал param1, единицы измерения которого заданы
параметром interval. Возможные единицы измерения — те же, что и для функции TIMESTAMPDIFF().
DATE(datetime) — извлекает из значения даты и времени суток
в формате DATETIME (‘YYYY-MM-DD hh:mm:ss’) только дату, отсекая часы, минуты и секунды.
TIME(datetime) — извлекает из значения даты и времени суток
в формате DATETIME (‘YYYY-MM-DD hh:mm:ss’) только время суток, отсекая дату.
TIMESTAMP(param) — принимает в качестве аргумента дату и время
суток в полном или кратком формате и возвращает полный вариант в формате
DATETIME (‘YYYY-MM-DD hh:mm:ss’).
DAY(date), DAYOFMONTH(date) — принимают в качестве аргумента дату,
и возвращают порядковый номер дня в месяце (от 1 до 31).
DAYNAME(date) — принимает в качестве аргумента дату,
и возвращает день недели в виде полного слова на английском языке.
DAYOFWEEK(date) — принимает в качестве аргумента дату,
и возвращает порядкоый номер дня недели от 1 (воскресенье) до 7 (суббота).
WEEKDAY(date) — принимает в качестве аргумента дату,
и возвращает порядкоый номер дня недели от 0 (понедельник) до 6 (воскресенье).
WEEK(date) — принимает в качестве аргумента дату,
и возвращает номер недели в году для этой даты от 0 до 53.
WEEKOFYEAR(datetime) — возвращает порядковый номер недели в году
для даты datetime от 1 до 53.
MONTH(datetime) — возвращает числовое значение месяца года от 1 до 12
для даты datetime.
MONTHNAME(datetime) — возвращает строку с названием месяца
для даты datetime.
QUARTER(datetime) — возвращает значение квартала от 1 до 4
для даты datetime, которая может быть передана в формате ‘YYYY-MM-DD’ или ‘YYYY-MM-DD hh:mm:ss’.
YEAR(datetime) — возвращает год от 1000 до 9999
для даты datetime.
DAYOFYEAR(date) — возвращает порядковый номер дня в году
от 1 до 366 для даты date.
HOUR(datetime) — возвращает значение часа от 0 до 23 для
времени datetime.
MINUTE(datetime) — возвращает значение минут от 0 до 59 для
времени datetime.
SECOND(time) — возвращает количество секунд для времени суток
time, которое задаётся либо в виде строки ‘hh:mm:ss’, либо числа hhmmss.
EXTRACT(type FROM datetime) — принимает дату и время суток datetime
и возвращает часть, определяемую параметром type. Значениями параметра могут быть YEAR, MONTH, DAY,
HOUR, MINUTE, SECOND.
TO_DAYS(date) — принимает дату date в кратком ‘YYYY-MM-DD’ или
полном формате ‘YYYY-MM-DD hh:mm:ss’ и возвращает количество дней, прошедших с нулевого года.
FROM_DAYS(N) — принимает количество дней N, прошедших
с нулевого года, и возвращает дату в формате ‘YYYY-MM-DD’.
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(datetime) — если параметр не
указан, то возвращает количество секунд, прошедших с 00:00 1 января 1970 года. Если параметр datetime
указан (в кратком ‘YYYY-MM-DD’ или полном формате ‘YYYY-MM-DD hh:mm:ss’), то возвращает разницу
в секундах между 00:00 1 января 1970 года и датой datetime.
FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp, format) —
принимает количество секунд, прошедших с 00:00 1 января 1970 года и возвращает дату и время суток
в виде строки ‘YYYY-MM-DD hh:mm:ss’ или в виде числа YYYYDDMMhhmmss в зависимости от того, вызвана
функция в строковом или числовом контексте.
TIME_TO_SEC(time) — принимает время суток time в формате
‘hh:mm:ss’ и возвращает количество секунд, прошедших с начала суток.
SEC_TO_TIME(seconds) — принимает количество секунд seconds,
прошедших с начала суток и возвращает время в формате ‘hh:mm:ss’ или hhmmss в зависимости от того, вызвана
функция в строковом или числовом контексте.
MAKEDATE(year, dayofyear) — принимает год year, номер дня в году
dayofyear и возвращает дату в формате ‘YYYY-MM-DD’.
MAKETIME(hour, minute, second) — принимает часы hour, минуты
minute и секунды second и возвращает время суток в формате ‘hh:mm:ss’.
Поделиться с друзьями
Реляционные базы данных и язык SQL
SQL Работа с датами
SQL DATE
Самое сложное при работе с датами — это убедиться, что формат даты, которую вы пытаетесь вставить, совпадает с форматом столбца даты в базе данных.
Пока ваши данные содержат только часть даты, ваши запросы будут работать так, как и ожидалось.
Однако, если задействована временная часть, все становится еще сложнее.
SQL Типы данных даты
MySQL поставляется со следующими типами данных для хранения даты или значения даты/времени в базе данных:
- DATE — формат YYYY-MM-DD
- DATETIME — формат: YYYY-MM-DD HH:MI:SS
- TIMESTAMP — формат: YYYY-MM-DD HH:MI:SS
- YEAR — формат YYYY или YY
SQL Server поставляется со следующими типами данных для хранения даты или значения даты/времени в базе данных:
- DATE — формат YYYY-MM-DD
- DATETIME — формат: YYYY-MM-DD HH:MI:SS
- SMALLDATETIME — формат: YYYY-MM-DD HH:MI:SS
- TIMESTAMP — формат: уникальное число
Примечание: Типы дат выбираются для столбца при создании новой таблицы в базе данных!
SQL Работа с датами
Вы можете легко сравнить две даты, если нет никакого компонента времени!
Предположим, что у нас есть следующая таблица «Orders»:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
2 | Camembert Pierrot | 2008-11-09 |
3 | Mozzarella di Giovanni | 2008-11-11 |
4 | Mascarpone Fabioli | 2008-10-29 |
Теперь мы хотим выбрать записи с порядковым номером «2008-11-11» из приведенной выше таблицы.
Мы используем следующую инструкцию SELECT:
SELECT * FROM Orders WHERE OrderDate=’2008-11-11′
Результирующий набор будет выглядеть следующим образом:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
3 | Mozzarella di Giovanni | 2008-11-11 |
Теперь предположим, что таблица «Orders» выглядит следующим образом (обратите внимание на компонент time в столбце «OrderDate»):
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 13:23:44 |
2 | Camembert Pierrot | 2008-11-09 15:45:21 |
3 | Mozzarella di Giovanni | 2008-11-11 11:12:01 |
4 | Mascarpone Fabioli | 2008-10-29 14:56:59 |
Если мы используем тот же оператор SELECT, что и выше:
SELECT * FROM Orders WHERE OrderDate=’2008-11-11′
Мы не получим никакого результата! Это происходит потому, что запрос ищет только даты без временной части.
Совет: Чтобы ваши запросы были простыми и удобными в обслуживании, не допускайте компонентов времени в ваших датах!
Sr.No. | Описание функции |
---|---|
1 | ADDDATE() – Добавление даты |
2 | ADDTIME() – Добавляет время |
3 | CONVERT_TZ() – Преобразование из одного часового пояса в другой |
4 | CURDATE() – Возвращает текущую дату |
5 | CURRENT_DATE(), CURRENT_DATE – Синонимы для CURDATE() |
6 | CURRENT_TIME(), CURRENT_TIME – Синонимы для CURTIME() |
7 | CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP – Синоним NOW() |
8 | CURTIME() – Возвращает текущее время |
9 | DATE_ADD() – Добавляет две даты |
10 | DATE_FORMAT() – Формат даты, как указано |
11 | DATE_SUB() – Вычитание двух дат |
12 | DATE() – Извлекает часть выражения даты или даты и времени |
13 | DATEDIFF() – Вычитание двух дат |
14 | DAY() – Синоним DAYOFMONTH() |
15 | DAYNAME() – Возвращает имя дня недели |
16 | DAYOFMONTH() – Возвращает день месяца (1-31) |
17 | DAYOFWEEK() – Возвращает индекс недели |
18 | DAYOFYEAR() – Возвращает день года (1-366) |
19 | EXTRACT() – Извлекает часть даты |
20 | FROM_DAYS() – Преобразует номер дня до даты |
21 | FROM_UNIXTIME() – Формат даты, как метка времени UNIX |
22 | HOUR() – Извлекает час |
23 | LAST_DAY() – Возвращает последний день месяца |
24 | LOCALTIME() – Местное время, синоним NOW() |
25 | LOCALTIMESTAMP() – Синоним NOW() |
26 | MAKEDATE() – Создает дату в год и день из года |
27 | MAKETIME() |
28 | MICROSECOND() – Возвращает микросекунды от аргумента |
29 | MINUTE() – Возвращает минуту от аргумента |
30 | MONTH() – Возвращает месяц |
31 | MONTHNAME() – Возвращает название месяца |
32 | NOW() – Возвращает текущую дату и время |
33 | PERIOD_ADD() – Добавляет период в год-месяц |
34 | PERIOD_DIFF() – Возвращает количество месяцев между периодами |
35 | QUARTER() – Возвращает четверть от даты |
36 | SEC_TO_TIME() – Преобразование секунд в формат ‘HH: MM: SS’ |
37 | SECOND() – Возвращает секунды (0-59) |
38 | STR_TO_DATE() – Преобразует строку в дату |
39 | SUBDATE() – Когда вызывается с тремя аргументами является синонимом DATE_SUB() |
40 | SUBTIME() – Вычитание время |
41 | SYSDATE() – Возвращает время, при котором функция выполняет |
42 | TIME_FORMAT() – Формат времени |
43 | TIME_TO_SEC() – Возвращаемый аргумент преобразуется в секунды |
44 | TIME() – Извлекает время |
45 | TIMEDIFF() – Отнимает время |
46 | TIMESTAMP() – С одним аргументом функция возвращает выражение DATE или DateTime. С двумя аргументами, сумма аргументов |
47 | TIMESTAMPADD() – Добавляет интервал выражения даты и времени |
48 | TIMESTAMPDIFF() – Вычитание интервала из выражения даты и времени |
49 | TO_DAYS() – Возвращаемый аргумент даты конвертируются в дни |
50 | UNIX_TIMESTAMP() – Возвращает метку времени UNIX |
51 | UTC_DATE() – Возвращает текущую дату UTC |
52 | UTC_TIME() – Возвращает текущее время UTC |
53 | UTC_TIMESTAMP() – Возвращает текущую дату и время UTC |
54 | WEEK() – Возвращает номер недели |
55 | WEEKDAY() – Возвращает индекс дня недели |
56 | WEEKOFYEAR() – Возвращает календарную неделю на дату (1-53) |
57 | YEAR() – Возвращает год |
58 | YEARWEEK() – Возвращает год и неделю |
SQL Функции даты
SQL Даты
Самой трудной частью при работе с датами, чтобы быть уверенным, что формат даты вы пытаетесь вставить, соответствует формату столбца даты в базе данных.
Функции даты MySQL
В следующей таблице перечислены наиболее важные встроенные функции даты в MySQL:
функция | Описание |
---|---|
NOW() | Возвращает текущую дату и время |
CURDATE() | Возвращает текущую дату |
CURTIME() | Возвращает текущее время |
DATE() | Извлечение даты часть даты или выражения даты / времени |
EXTRACT() | Возвращает одну часть даты / времени |
DATE_ADD() | Добавляет заданный интервал времени до даты |
DATE_SUB() | Вычитает заданный интервал времени от даты |
DATEDIFF() | Возвращает количество дней между двумя датами |
DATE_FORMAT() | дата Отображение / времени данные в различных форматах |
SQL Дата сервера Функции
В следующей таблице перечислены наиболее важные встроенные функции даты в SQL Server:
функция | Описание |
---|---|
GETDATE() | Возвращает текущую дату и время |
DATEPART() | Возвращает одну часть даты / времени |
DATEADD() | Добавляет или вычитает определенный интервал времени от даты |
DATEDIFF() | Возвращает время между двумя датами |
CONVERT() | дата Отображение / времени данные в различных форматах |
SQL Дата типы данных
MySQL поставляется со следующими типами данных для хранения даты или даты / значение времени в базе данных:
- ДАТА — формат YYYY-MM-DD
- DATETIME — формат: YYYY-MM-DD HH: MI: SS
- TIMESTAMP — формат: YYYY-MM-DD HH: MI: SS
- ГОД — формат YYYY или YY
SQL Server поставляется со следующими типами данных для хранения даты или даты / значение времени в базе данных:
- ДАТА — формат YYYY-MM-DD
- DATETIME — формат: YYYY-MM-DD HH: MI: SS
- SMALLDATETIME — формат: YYYY-MM-DD HH: MI: SS
- TIMESTAMP — формат: уникальный номер
Note: Типы даты выбраны для столбца при создании новой таблицы в базе данных!
Для обзора всех типов данных , доступных, перейдите к нашей полной Справочник по типам данных .
SQL Работа с датами
Вы можете сравнить две даты легко, если нет времени компонент участвует!
Предположим , мы имеем следующую «Orders» таблица:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
2 | Camembert Pierrot | 2008-11-09 |
3 | Mozzarella di Giovanni | 2008-11-11 |
4 | Mascarpone Fabioli | 2008-10-29 |
Теперь мы хотим , чтобы выбрать записи с OrderDate из «2008-11-11» из приведенной выше таблицы.
Мы используем следующую ЗЕЬЕСТ:
SELECT * FROM Orders WHERE OrderDate=’2008-11-11′
Результат-набор будет выглядеть следующим образом:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
Функция & Описание |
---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Функция CURRENT_DATE — текущая дата
Функция CURRENT_DATE возвращает текущую дату в формате год-месяц-день.
См. также функцию NOW,
которая возвращает текущий момент времени в формате год-месяц-день часы:минуты:секунды.
См. также функцию CURRENT_TIME,
возвращает текущее время в формате часы:минуты:секунды.
Синтаксис
При выборке:
SELECT FROM имя_таблицы WHERE date = CURRENT_DATE()
При вставке:
INSERT INTO имя_таблицы SET date = CURRENT_DATE()
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди | name имя | date какая-то дата |
---|---|---|
1 | Дима | 2010-03-01 |
2 | Петя | 2011-04-02 |
3 | Вася | 2045-05-03 |
4 | Коля | 2046-06-04 |
Пример
В данном примере выбираются все работники, у которых дата больше текущей:
SELECT * FROM workers WHERE date > CURRENT_DATE()
SQL запрос выберет следующие строки:
id айди | name имя | date какая-то дата |
---|---|---|
3 | Вася | 2045-05-03 |
4 | Коля | 2046-06-04 |
Пример
В данном примере выбираются все работники, у которых дата меньше текущей:
SELECT * FROM workers WHERE date
SQL запрос выберет следующие строки:
id айди | name имя | date какая-то дата |
---|---|---|
1 | Дима | 2010-03-01 |
2 | Петя | 2011-04-02 |
Пример
В данном примере в базу добавляется работник,
при этом в поле date записывается текущая дата с помощью CURRENT_DATE:
INSERT INTO workers SET name='Иван', date=CURRENT_DATE()
SQL запрос выберет следующие строки:
id айди | name имя | date какая-то дата |
---|---|---|
1 | Дима | 2010-03-01 |
2 | Петя | 2011-04-02 |
3 | Вася | 2045-05-03 |
4 | Коля | 2046-06-04 |
5 | Иван | 2020-09-28 |
Команда | Описание | ||
---|---|---|---|
%d | День месяца, число от 00 до 31. | ||
%e | День месяца, число от 0 до 31. | ||
%m | Месяц, число от 01 до 12. | ||
%c | Месяц, число от 1 до 12. | ||
%Y | Год, число, 4 цифры. | ||
%y | Год, число, 2 цифры. | ||
%j | День года, число от 001 до 366. | ||
%H | Час, число от 00 до 23. | ||
%k | Час, число от 0 до 23. | ||
%h | Час, число от 01 до 12. | ||
%I | Час, число от 01 до 12. | ||
%l | Час, число от 1 до 12. | ||
%i | Минуты, число от 00 до 59. | ||
%S | Секунды, число от 00 до 59. | ||
%s | Секунды, число от 00 до 59. | ||
%w | День недели (0 — воскресенье, 1 — понедельник). | ||
%W | Название дня недели по-английски. | ||
%a | Сокращенный день недели по-английски. | ||
%M | Название месяца по-английски. | ||
%b | Сокращенный месяц по-английски. | ||
%D | День месяца с английским суффиксом (1st, 2nd, 3rd и т.д.). | ||
%r | Время, 12-часовой формат (hh:mm:ss [AP]M). | ||
%T | Время, 24-часовой формат (hh:mm:ss). | ||
%p | AM или PM. | ||
%U | Неделя, где воскресенье считается первым днем недели, число от 00 до 53. | ||
%u | Неделя, где понедельник считается первым днем недели, число от 00 до 53. | ||
%V | Неделя, где воскресенье считается первым днем недели, число от 01 до 53. Используется с `%X’. | ||
%v | Неделя, где понедельник считается первым днем недели, число от 01 до 53. Используется с `%x’. | ||
%X | Год для недели, где воскресенье считается первым днем недели, число, 4 цифры. Используется с ‘%V’. | ||
%x | Год для недели, где воскресенье считается первым днем недели, число, 4 разряда. Используется с ‘%v’. | ||
%% | Символ `%’. |
id айди | name имя | date дата регистрации | new_date дата в новом формате |
---|---|---|---|
1 | Дима | 2010-03-01 12:01:02 | 01.03.2010 |
2 | Петя | 2011-04-02 13:02:03 | 02.04.2011 |
3 | Вася | 2012-05-03 14:03:04 | 03.05.2012 |
Обзор функций даты SQL Server
На этой странице перечислены наиболее часто используемые функции даты SQL Server, которые позволяют эффективно обрабатывать данные даты и времени.
Возвращает текущую дату и время
Функция | Описание |
---|---|
CURRENT_TIMESTAMP | Возвращает текущую системную дату и время без части часового пояса. |
GETUTCDATE | Возвращает часть даты в виде целого числа. |
GETDATE | Возвращает текущую системную дату и время операционной системы, в которой работает SQL Server. |
SYSDATETIME | Возвращает текущую системную дату и время с большей точностью до долей секунды, чем функция GETDATE (). |
SYSUTCDATETIME | Возвращает текущую системную дату и время в формате UTC. |
SYSDATETIMEOFFSET | Возвращает текущую системную дату и время с указанием часового пояса. |
Возвращение даты и времени Части
Функция | Описание |
---|---|
DATENAME | Возвращает часть даты в виде символьной строки |
DATEPART | Возвращает дату часть даты в виде целого числа |
DAY | Возвращает день указанной даты в виде целого числа |
MONTH | Возвращает месяц указанной даты в виде целого числа |
YEAR | Возвращает год даты как целое число. |
Возврат разницы между двумя датами
Функция | Возвращаемое значение |
---|---|
DATEDIFF | Возвращает разницу в части даты между двумя датами. |
Изменение дат
Создание даты и времени из их частей
Проверка значений даты и времени
Функция | Описание |
---|---|
ISDATE | Проверить, является ли значение действительной датой, время или значение datetime |
.Функции даты
в SQL Server и MySQL
Даты SQL
Самая трудная часть при работе с датами — убедиться, что формат даты, которую вы пытаетесь вставить,
соответствует формату столбца даты в базе данных.
Пока ваши данные содержат только часть даты, ваши запросы будут работать должным образом. Однако, если задействована временная часть, она становится
сложнее.
Типы данных даты SQL
MySQL поставляется со следующими типами данных для хранения даты или значения даты / времени в базе данных:
- ДАТА — формат ГГГГ-ММ-ДД
- DATETIME — формат: YYYY-MM-DD HH: MI: SS
- TIMESTAMP — формат: ГГГГ-ММ-ДД ЧЧ: MI: SS
- ГОД — формат ГГГГ или ГГ
SQL Server поставляется со следующими типами данных для хранения даты или значения даты / времени в базе данных:
- ДАТА — формат ГГГГ-ММ-ДД
- DATETIME — формат: ГГГГ-ММ-ДД ЧЧ: MI: SS
- SMALLDATETIME — формат: ГГГГ-ММ-ДД ЧЧ: MI: SS
- TIMESTAMP — формат: уникальный номер
Примечание: Типы дат выбираются для столбца при создании новой таблицы в базе данных!
SQL Работа с датами
Вы можете легко сравнить две даты, если в них нет временной составляющей!
Предположим, у нас есть следующая таблица «Заказы»:
OrderId | Название продукта | Дата заказа |
---|---|---|
1 | Geitost | 11-11-2008 |
2 | Камамбер Пьеро | 2008-11-09 |
3 | Моцарелла ди Джованни | 11-11-2008 |
4 | Маскарпоне Фабиоли | 29.10.2008 |
Теперь мы хотим выбрать записи с OrderDate «2008-11-11» из приведенной выше таблицы.
Мы используем следующий оператор SELECT:
ВЫБЕРИТЕ * ИЗ заказов, ГДЕ OrderDate = ‘2008-11-11’
Результат будет выглядеть так:
OrderId | Название продукта | Дата заказа |
---|---|---|
1 | Geitost | 11-11-2008 |
3 | Моцарелла ди Джованни | 11-11-2008 |
Теперь предположим, что таблица «Заказы» выглядит следующим образом (обратите внимание на компонент времени в столбце «Дата заказа»):
OrderId | Название продукта | Дата заказа |
---|---|---|
1 | Geitost | 11-11-2008 13:23:44 |
2 | Камамбер Пьеро | 2008-11-09 15:45:21 |
3 | Моцарелла ди Джованни | 11-11-2008, 11:12:01 |
4 | Маскарпоне Фабиоли | 2008-10-29 14:56:59 |
Если мы используем тот же оператор SELECT, что и выше:
ВЫБЕРИТЕ * ИЗ заказов, ГДЕ OrderDate = ‘2008-11-11’
мы не получим результата! Это связано с тем, что запрос ищет только даты без временной части.
Совет: Чтобы ваши запросы были простыми и удобными в обслуживании, не допускайте компонентов времени в ваших датах!
.Обзор формата даты
SQL; Функция DateDiff SQL, функция DateAdd SQL и многое другое
Функции формата даты SQL, такие как функция DateDiff SQL и функция DateAdd SQL, часто используются администраторами баз данных, но многие из нас никогда не удосужились полностью разобраться в этих чрезвычайно полезных функциях. Для профессионалов, только начинающих работать с SQL Server, эти функции являются одними из первых, с которыми они знакомятся. Так что, надеюсь, в этой статье найдется что-нибудь для всех с любым уровнем подготовки.
DateTime — один из наиболее интересных типов данных, поддерживаемых в мире реляционных баз данных.В этой статье мы рассмотрим работу с типами данных даты и времени в SQL Server. Мы поймем основы типа данных даты и времени, а также увидим различные примеры того, как запрашивать поля даты и времени с помощью встроенных функций в SQL Server для управления данными, преобразования значений даты и времени. и в некоторых случаях выполнять арифметические операции.
Во-первых, давайте взглянем на некоторые популярные функции формата даты и времени SQL.
По умолчанию SQL Server поддерживает языки, поддерживаемые операционной системой Windows.В зависимости от языкового стандарта и параметров сортировки при установке SQL Server формат даты SQL может отличаться. Тип данных, которые вы собираетесь воспроизводить, определяется на основе настроек локали и настроек сортировки SQL Server.
В SQL Server тип данных DATE имеет два формата нейтрального языка по умолчанию.
«ГГГГММДД»
В следующем примере запрашивается таблица HumanResource.Employee , чтобы увидеть формат даты SQL для значений HireDate.
ЕГЭ AdventureWorks2014;
GO
ВЫБЕРИТЕ HireDate, BusinessEntityID, LoginID, JobTitle
FROM HumanResources.Сотрудник;
ГО
Теперь запросите столбец HireDate , используя формат нейтрального языка. В запросе мы передаем целочисленное значение, состоящее из года, 2008; месяц, 12 и 7 -й день.
ВЫБЕРИТЕ HireDate, BusinessEntityID, LoginID, JobTitle
FROM HumanResources.Employee
WHERE HireDate = ‘20081207’;
Примечание. В основном это означает, что входное значение является числовым; механизм SQL внутренне преобразует его и фактически выдает символьное значение.Итак, он заключен в одинарные кавычки
‘MM-DD-YYYY’ (формат на основе США)
В этом формате даты SQL в столбец HireDate вводятся значения «ММ-ДД-ГГГГ». Это не целочисленный формат. Давайте запустим тот же запрос с новым форматом даты SQL для ввода значения «12 -07-2008» в столбец HireDate. Итак, давайте запустим следующий запрос и проверим вывод. На выходе получается тот же набор из пяти записей.
ВЫБЕРИТЕ HireDate, BusinessEntityID, LoginID, JobTitle
FROM HumanResources.Сотрудник
ГДЕ HireDate = ’12-07-2008 ‘;
ГО
Примечание. Значения формата нейтрального языка неявны, и SQL Server выполнит необходимое преобразование. Любой другой формат даты SQL требует правильного преобразования операндов и / или значений.
В следующих примерах отображается сообщение об ошибке из-за неправильного использования формата даты SQL.
ВЫБЕРИТЕ HireDate, BusinessEntityID, LoginID, JobTitle FROM HumanResources.Сотрудник ГДЕ HireDate = ’25-12-2008 ‘; |
Теперь и операнд, и его значения преобразованы в стандартный формат 103. Здесь вы можете найти дополнительную информацию о функциях CAST и Convert. В следующем примере возвращаются все строки сотрудника, где HireDate ’25 -12-2008 ’
SELECT HireDate, BusinessEntityID, LoginID, JobTitle FROM HumanResources.Сотрудник WHERE CONVERT (DATE, HireDate, 103) = CONVERT (DATE, ’25-12-2008 ‘, 103); |
Теперь давайте рассмотрим некоторые функции даты, которые SQL Server предоставляет нам, и эти функции даты позволяют нам работать с различными частями дат и даже управлять некоторыми функциями, с которыми мы можем работать в терминах дат. .
Давайте посмотрим на функцию DATEPART SQL.Эта функция возвращает целочисленное значение из указанного столбца даты.
Запросите столбец HireDate , чтобы получить только часть даты в году.
В следующем примере создается целочисленный выходной столбец с именем [Часть года], который должен возвращать только значения года.
SELECT DATEPART (YEAR, HireDate) AS [Часть года] FROM HumanResources.Сотрудник; ГО |
Запросите столбец HireDate , чтобы вернуть только месячную часть даты.
В следующем примере создается целочисленный выходной столбец с именем [Часть месяца], который должен возвращать только значения месяца.
SELECT DATEPART (MONTH, HireDate) AS [Часть месяца] FROM HumanResources.Employee; |
Запросите столбец HireDate , чтобы получить только квартальную часть даты.
В следующем примере создается целочисленный выходной столбец с именем [Часть месяца], который должен возвращать только значения месяца.
SELECT DATEPART (QUARTER, HireDate) AS [Quarter Part] FROM HumanResources.Сотрудник; ГО |
В следующем примере возвращаются сведения о продажах за определенный день из поля orderDate. В примере также показано использование функции DATEPART SQL и нескольких связанных с ней аргументов.
SELECT DATEPART (DAY, SOH.OrderDate) [часть дня], DATEPART (MONTH, SOH.OrderDate) [часть месяца], DATEPART (QUARTER, SOH.OrderDate) [Quarter Part], DATEPART (YEAR, SOH.OrderDate) [Year Part], SUM (SOH.SubTotal) TotalSales ИЗ продаж.SalesOrderHeader SOH .SalesOrderHeader SOH . SOD.SalesOrderId GROUP BY DATEPART (DAY, SOH.OrderDate), DATEPART (QUARTER, SOH.OrderDate), DATEPART (YEAR, SOH.OrderDate), DATEPART.MOND, DATEPART. ЗАКАЗ ОТ ОТДЕЛЕНИЯ (КВАРТАЛ, SOH.OrderDate), DATEPART (ГОД, SOH.OrderDate), DATEPART (MONTH, SOH.OrderDate); |
Оператор SELECT выбирает DATEPART, который является именем функции, и принимает два аргумента в круглых скобках. Во-первых, аргумент datepart, а второй — выражение даты.
Давайте посмотрим, как использовать функцию DATENAME SQL. Это похоже на функцию DATEPART SQL, но возвращает символьную строку из указанного поля даты.
SELECT DATENAME (WEEKDAY, HireDate) [Day], DATENAME (WEEK, HireDate) [Week], DATENAME (MONTH, HireDate) [Month], DATENAME (YEAR, HireDate) [YEAR] FROM HumanResources; ГО |
Затем давайте взглянем на детерминированные функции, которые возвращают части даты и времени в виде целого числа. В следующем примере возвращаются целочисленные значения из поля OrderDate для соответствующих функций YEAR и MONTH.
ВЫБЕРИТЕ ГОД (SOH.OrderDate) как SalesYear, MONTH (SOH.OrderDate) как SalesMonth, SUM (SOH.SubTotal) как TotalSales FROM sales.SalesOrderHeader SOH 9000INSail SalesOrderId = SOD.SalesOrderId ГРУППА ПО ГОДУ (SOH.OrderDate), МЕСЯЦ (SOH.OrderDate) ЗАКАЗ ПО ГОДУ (SOH.OrderDate), МЕСЯЦ (SOH.OrderDate) |
Результатом является агрегированное значение TotalSales на основе ежемесячных продаж.
Теперь давайте взглянем на несколько других функций. И этот, который мы собираемся рассмотреть, называется DATEDIFF. Функция DATEDIFF SQL возвращает целое число со знаком, которое позволяет нам определить время, прошедшее между двумя датами.
Давайте поиграем с запросом, чтобы использовать разные части даты, чтобы увидеть результаты.
SELECT DATEDIFF (YEAR, HireDate, GETDATE ()) No_Of_Years, DATEDIFF (МЕСЯЦ, HireDate, GETDATE ()) No_Of_Months, DATEDIFF (квартал, DATE_DATE_WR, DATEDIFF (квартал, DATE_DATE), GETDIFO (квартал, DATE_DATE), GET_DATE) , GETDATE ()) Week_Of_Year, DATEDIFF (DAYOFYEAR, HireDate, GETDATE ()) Day_Of_Year FROM HumanResources.Сотрудник; ГО |
В следующем примере возвращаются части времени между двумя полями DateTime. В этом примере часы, минуты и секунды между значениями DateTime вычисляются с использованием функции SQL DATEDIFF
SELECT DATEDIFF (час, GETDATE (), GETDATE () + 1) как часы, DATEDIFF (минута, GETDATE (), GETDATE () + 1) как минуты, DATEDIFF (секунда, GETDATE () , GETDATE () + 1) как секунды; ГО |
Как использовать функцию DATEDIFF SQL в предложении where
В следующем примере возвращаются все сотрудники, которые работают в организации более 10 лет.Условная логика в столбце HireDate сравнивается с периодом, превышающим 120 месяцев, упоминается в предложении where.
SELECT * FROM HumanResources.Employee WHERE DATEDIFF (MONTH, HireDate, GETDATE ())> 120; ГО |
Как использовать функцию DateDiff SQL с функцией агрегирования
В следующем примере возвращается количество лет между первой датой найма и последней датой найма.В этом случае мы ищем минимальную агрегатную функцию HireDate и максимальную HireDate, которые используются в качестве входных параметров для функции DATEDIFF SQL. С этими значениями можно легко определить количество лет между первым и последним наймом.
ВЫБРАТЬ РАЗМЕР (ГОД, МИН (Дата найма), МАКС (Дата найма)) No_Of_Years FROM HumanResources.Employee; |
Давайте посмотрим на функцию DATEADD SQL.Функции добавляют или вычитают значение указанной datepart и возвращают измененное значение datepart.
Давайте посмотрим на следующий пример. Значение 1 добавляется к различным частям даты, а значение -1 добавляется к части даты часов и -30 добавляется к части даты минут .
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 14 18 19 20 21 22 23 24 25 26 27 28 29 30 000 000 34 35 | SELECT ‘TodayDate’, GETDATE () UNION ALL SELECT ‘год’, DATEADD (год, 1, GETDATE ()) UNION ALL SELECT ‘квартал’, 9000ADD DATE ( квартал, 1, GETDATE ()) UNION ALL SELECT ‘month’, DATEADD (месяц, 1, GETDATE ()) UNION ALL SELECT ‘dayofyear’, DATEADD (dayofyear, 1, GETDATE ()) UNION ALL SELECT ‘day’, DATEADD (day, 1, GETDATE ()) UNION ALL SELECT ‘week’, DATEADD (неделя, 1, GETDATE ()) UNION ALL SELECT ‘будний день’, DATEADD (рабочий день, 1, GETDATE ()) UNION ALL SELECT ‘час’, DATEADD (час, -1, GETDATE ()) UNION ВСЕ ВЫБРАТЬ ‘минута’, DATEADD (минута, -30, GETDATE ()) UNION ALL SELECT ‘секунда’, DATEADD (секунда, 1, GETDATE ()) UNION ALL SELECT ‘миллисекунда’, DATEADD (миллисекунда, 1, GETDATE ()) |
В выводе мы видим, что значение обрабатывается функцией GETDATE () в соответствии с заданной частью даты.
Примечание. SQL-функцию DATEADD и DATEDIFF можно использовать в предложениях SELECT, WHERE, HAVING, GROUP BY и ORDER BY.
Datadiff против Datediff_BIG
РАЗНДАТ РАЗН | DATEDIFF_BIG | ||||
Это очень старая функция, и она доступна в первоначальном выпуске SQL Server. | С рождением SQL Server 2016 Microsoft представила новую функцию DATEDIFF SQL, расширенную версию DATEDIFF, известную как DATEDIFF_BIG. | ||||
Синтаксис РАЗНДАТ (datepart, start_date, end_date) | Синтаксис DATEDIFF_BIG (часть даты, начальная_дата, конечная_дата) | ||||
Тип возврата функции DATEDIFF SQL — INTEGER (4 байта). | Тип возвращаемого значения SQL-функции DATEDIFF_BIG — BIGINT ( 8 байт). | ||||
Эта функция возвращает целочисленное значение, представляющее прошедшее время или день на основе определенного DATEPART между указанным началом DateTime и конечным DateTime. | Эта функция возвращает БОЛЬШОЕ целочисленное значение, представляющее прошедшее время или день на основе определенного DATEPART между указанным началом DateTime и конечным DateTime. | ||||
Целочисленное значение находится в диапазоне от -2 147 483 648 до +2 147 483 647. | Тип данных BIGINT может хранить значение между диапазоном От -2 ^ 63 (-9,223,372,036,854,775,808) до 2 ^ 63-1 (9,223,372,036,854,775,807) | ||||
Пример: Этот пример демонстрирует поведение функции DATEDIFF SQL, когда разница в миллисекундах между двумя датами больше, чем INT max (т.е.е. 2 147 483 647) значение.
Сообщение об ошибке: | Пример: Этот пример демонстрирует поведение SQL-функции DATEDIFF_BIG, когда разница в миллисекундах между двумя датами больше, чем INT max (т.е.е. 2 147 483 647) значение.
| ||||
|
|
На этом пока все в этой статье о формате даты SQL …
Заключение
До сих пор мы видели очень важные функции формата даты SQL, такие как DATEPART, DATENAME, YEAR, MONTH и DAY, с особым упором на SQL-функцию DATEADD и SQL-функцию DATEDIFF.Функции формата даты SQL в SQL-сервере действительно мощные и действительно помогают предоставлять эффективную аналитику данных и отчеты. В некоторых случаях это вопрос настройки параметров сортировки, настроек местоположения, простой корректировки входного потока текстового значения или исправления, внесенного в источник данных, для решения проблемы даты и времени.
Рекомендуется использовать формат нейтрального языка, потому что в большинстве случаев он работает лучше. Наконец, мы видим разницу между функцией DATEDIFF SQL и функцией DATEDIFF_BIG SQL.Надеюсь, вам понравилась эта статья. Если у вас есть вопросы, не стесняйтесь комментировать ниже
Я технолог по базам данных, имеющий более 11 лет богатого практического опыта работы с технологиями баз данных. Я являюсь сертифицированным специалистом Microsoft и имею степень магистра компьютерных приложений.
Моя специальность заключается в разработке и внедрении решений высокой доступности и кроссплатформенной миграции БД. В настоящее время разрабатываются технологии SQL Server, PowerShell, Oracle и MongoDB.
Посмотреть все сообщения от Prashanth Jayaram
Последние сообщения от Prashanth Jayaram (посмотреть все)
.
Функция DATEADD SQL Server на практических примерах
Резюме : в этом руководстве вы узнаете, как использовать функцию SQL Server DATEADD ()
для добавления указанного значения к указанной части даты.
SQL Server DATEADD ()
Обзор функции
Функция DATEADD ()
добавляет число к указанной части даты ввода даты и возвращает измененное значение.
Ниже показан синтаксис функции DATEADD ()
:
DATEADD (date_part, value, input_date)
Функция DATEADD ()
принимает три аргумента:
-
date_part
— это часть даты, к которой функцияDATEADD ()
прибавит значение -
значение
— это целое число, которое нужно добавить кdate_part
изinput_date
. Если значениеDATEADD ()
усекает часть десятичной дроби. В этом случае округление числа не выполняется. -
input_date
— это буквальное значение даты или выражение, которое может разрешаться в значение типаDATE
,DATETIME
,DATETIMEOFFSET
,DATETIME2
,SMALLATETIME
илиTIME
илиTIME
илиTIME В таблице перечислены действительные значения
date_part
:date_part сокращений год yy, yyyy квартал qq, q месяц mm, m dayofyear dy, y day dd, d неделя wk, ww час hh минут mi, n секунда сс, с миллисекунда мс 9007 4
микросекунда мкс наносекунда нс Функция
DATEADD ()
функция возвращает новое значение даты после добавления значенияdate_part
.SQL Server
DATEADD ()
Примеры функцииДавайте рассмотрим несколько примеров использования функции
DATEADD ()
.Добавить 1 секунду к 2018-12-31 23:59:59
ВЫБРАТЬ DATEADD (second, 1, '2018-12-31 23:59:59') результат;
Вот результат
результат ----------------------- 2019-01-01 00: 00: 00.000 (Затронута 1 строка)
Добавление 1 дня к 31.12.2018 00:00:00:
ВЫБРАТЬ DATEADD (день, 1, '2018-12-31 23:59:59') результат;
Результат:
результат ----------------------- 2019-01-01 23:59:59.000 (Затронута 1 строка)
В этом примере используется функция
DATEADD ()
для расчета предполагаемой даты отгрузки на основе даты заказа:SELECT номер заказа, Пользовательский ИД, Дата заказа, DATEADD (день, 2, дата_порядка) предполагаемая_дата_поставки ОТ заказы на продажу ГДЕ shipped_date ЕСТЬ NULL СОРТИРОВАТЬ ПО приблизительная_поставленная_дата DESC;
На следующем рисунке показан частичный вывод:
Примеры обработки месяца
Если вы добавляете число месяцев к дате, а день, когда результат даты не существует, функция
DATEADD ()
вернет последний день месяца возврата.См. Следующий пример:
SELECT DATEADD (месяц, 4, '2019-05-31') как результат;
В этом примере месяц даты возврата - сентябрь. Однако 31-й день не существует в сентябре, поэтому функция
DATEADD ()
возвращает последний день сентября (30) в качестве дня для даты результата:result ----------------------- 2019-09-30 00: 00: 00.000 (Затронута 1 строка)
Обратите внимание, что следующий запрос возвращает тот же результат:
SELECT DATEADD (месяц, 4, '2019-05-30') как результат;
Вывод:
результат ----------------------- 2019-09-30 00:00:00.000 (Затронута 1 строка)
В этом руководстве вы узнали, как использовать функцию SQL Server
DATEADD ()
для добавления указанного значения к части даты даты..