«Сильно не хватает функций работы с датой-временем. типа dateadd, datediff, datepart как в mssql,» — такое сообщение мы получили от одного из подписчиков.
И действительно, их не хватает...
Но «не хватает» — это одно, а вот как должно быть — это другое. И начали с поисков ответов на вопросы:
Итак, если кратко по поводу первого пункта:
1. Для извлечения части даты из заданного значения
- в PostgreSQL, Oracle и MySQL это функция EXTRACT с одинаковым синтаксисом:
EXTRACT (unit FROM date)
- в SQL Server и SQLite наименование функции отличается (DATEPART и STRFTIME соответственно), но синтаксис схож:
DATEPART (unit, date)
2. Для вычисления разницы в заданном элементе между заданными датами
- в MySQL и SQL Server это функции с одинаковым наименованием, но отличным синтаксисом:
В первом случае это DATEDIFF (date1, date2) — возвращает разницу между датами date1 и date2 в днях.
Во втором случае это DATEDIFF (datepart, date1, date2) — возвращает разницу между датами date1 и date2 в заданном интервале. Это вариант удобнее, т.к. можно выбрать ту часть даты, разницу в которой нужно вычислить.
- в PostgreSQL и Oracle можно выполнить date2 - date1 и получить разницу между date1 и date2 в виде числа дней.
3. Для выполнение операции добавления / вычитания по отношению к элементу даты
В MySQL и SQL Server это
DATE_ADD (date, INTERVAL value unit)
и DATEADD (unit, value, date) соответственно. Реализация, как и названия функций, очень похожа.
В Oracle реализована функция ADD_MONTHS (date, num_months)
Также в Oracle и PostgreSQL есть и тип данных Interval, позволяющий выполнять операции с заданными интервалами, такие как сложение, вычитание и сравнение.
Например, в PostgreSQL для добавления к дате одного часа можно выполнить:
DATE '2001-09-28' + INTERVAL '1 HOUR' → 2001-09-28 01:00:00
Разные СУБД + разные пользователи = разные решения. Поэтому по второму и третьему пункту информация пока собирается. Мы этот вопрос изучаем, чтобы понять — какое решение наиболее оптимально. В общем, вопрос пока открыт.
Обсудить в телеграм!
И действительно, их не хватает...
Но «не хватает» — это одно, а вот как должно быть — это другое. И начали с поисков ответов на вопросы:
- какие функции реализованы в других СУБД;
- какие наиболее востребованы;
- нужны ли доработки известных функций.
Итак, если кратко по поводу первого пункта:
1. Для извлечения части даты из заданного значения
- в PostgreSQL, Oracle и MySQL это функция EXTRACT с одинаковым синтаксисом:
EXTRACT (unit FROM date)
- в SQL Server и SQLite наименование функции отличается (DATEPART и STRFTIME соответственно), но синтаксис схож:
DATEPART (unit, date)
2. Для вычисления разницы в заданном элементе между заданными датами
- в MySQL и SQL Server это функции с одинаковым наименованием, но отличным синтаксисом:
В первом случае это DATEDIFF (date1, date2) — возвращает разницу между датами date1 и date2 в днях.
Во втором случае это DATEDIFF (datepart, date1, date2) — возвращает разницу между датами date1 и date2 в заданном интервале. Это вариант удобнее, т.к. можно выбрать ту часть даты, разницу в которой нужно вычислить.
- в PostgreSQL и Oracle можно выполнить date2 - date1 и получить разницу между date1 и date2 в виде числа дней.
3. Для выполнение операции добавления / вычитания по отношению к элементу даты
В MySQL и SQL Server это
DATE_ADD (date, INTERVAL value unit)
и DATEADD (unit, value, date) соответственно. Реализация, как и названия функций, очень похожа.
В Oracle реализована функция ADD_MONTHS (date, num_months)
Также в Oracle и PostgreSQL есть и тип данных Interval, позволяющий выполнять операции с заданными интервалами, такие как сложение, вычитание и сравнение.
Например, в PostgreSQL для добавления к дате одного часа можно выполнить:
DATE '2001-09-28' + INTERVAL '1 HOUR' → 2001-09-28 01:00:00
Разные СУБД + разные пользователи = разные решения. Поэтому по второму и третьему пункту информация пока собирается. Мы этот вопрос изучаем, чтобы понять — какое решение наиболее оптимально. В общем, вопрос пока открыт.
Обсудить в телеграм!