Работа с датой и временем в SQL может быть несколько сложной, поскольку форматы даты различаются. Например, в США используется формат даты ММ-ДД-ГГГГ
, тогда как в Великобритании используется формат ДД-ММ-ГГГГ
.
Более того, разные системы управления базами данных (СУБД) используют разные типы данных для хранения даты и времени. Вот краткий обзор того, как дата и время хранятся в различных СУБД.
Пример | Формат | SQL Server | Oracle | MySQL | PostgreSQL |
2022-05-12 11:35:26 | ГГГГ-ММ-ДД чч:мм:сс | DATETIME | TIMESTAMP | ||
2022-05-12 | ГГГГ-ММ-ДД | DATE | DATE | DATE | |
11:35:26 | чч:мм:сс.мс | TIME | TIME | TIME | TIME |
2022-04-22 11:35:26.43 | ГГГГ-ММ-ДД чч:мм:сс.мс | DATETIME | TIMESTAMP | ||
2022 | ГГГГ | YEAR | |||
12-Янв-23 | ДД-МЕС-ГГ | TIMESTAMP |
Примечание: В каждой СУБД доступно много функций даты. Однако в этой статье мы рассмотрим наиболее часто используемые функции даты в SQL Server.
Создание таблицы для хранения даты и времени
При создании таблицы следует указывать тип данных для столбца с датой. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
-- Создаем таблицу с множеством столбцов с датой CREATE TABLE Users ( id INT, username VARCHAR(50), full_name VARCHAR(50), date_of_birth DATE, last_login DATETIME, registered_at TIMESTAMP ); -- Вставляем значения в таблицу Users INSERT INTO Users VALUES (1, 'harry', 'Harry Potter', '1999-04-14', '2022-04-22 10:34:53.44', '2020-03-15 07:31:42.23'); |
Запросить данные с использованием дат
Можно использовать запросы для получения данных с фильтрацией по датам. Например:
1 2 3 |
SELECT * FROM Teams WHERE registered = "2022-10-12"; |
Здесь мы возвращаем команды (Teams), которые были зарегистрированы 2022-10-12.
Давайте рассмотрим другой пример:
1 2 3 |
SELECT * FROM Teams WHERE registered > "2022-11-15"; |
Здесь мы выбираем только те команды, которые были зарегистрированы после 2022-11-15.
Часто используемые функции даты в SQL Server
GETDATE()
Эта функция используется для получения текущей даты и времени. Например:
1 |
SELECT GETDATE(); |
Здесь мы получаем текущую дату и время.
CURRENT_TIMESTAMP
Эта функция используется для получения текущей временной метки в системе. Например:
1 |
SELECT CURRENT_TIMESTAMP; |
Здесь мы получаем текущую временную метку в системе.
DATEDIFF(часть_даты, дата_начало, дата_конец)
Эта функция используется, чтобы определить сколько дней разницы между двумя датами. Функция DATEDIFF() принимает три аргумента:
часть_даты
— это часть даты (например: год, квартал, месяц, неделя), которую мы хотим сравнить между дата_начало
и дата_конец
.
дата_начало
и дата_конец
— даты для сравнения.
Например:
1 2 |
SELECT DATEDIFF(month, '2020-12-31 23:59:59', '2022-01-01 00:00:00'); -- результат: 13 |
Здесь мы получаем разницу между двумя датами в месяцах.
DATEADD(часть_даты, число, дата)
Эта функция используется для добавления числа к заданной части даты. Например:
1 2 |
SELECT DATEADD(month, 1, '2022-08-31'); -- результат: 2022-09-30 00:00:00 |
Здесь мы добавляем 1
к месяцу в дате 2022-08-31.
Примечание: Хотя мы обсудили только несколько функций, используемых в SQL Server, есть много других функций, используемых в различных СУБД. Для более детальной информации смотрите документации этих СУБД.