Делимся последними новостями о СУБД SoQoL

"Сильно не хватает..."

"Сильно не хватает..." «Сильно не хватает функций работы с датой-временем. типа 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

Разные СУБД + разные пользователи = разные решения. Поэтому по второму и третьему пункту информация пока собирается. Мы этот вопрос изучаем, чтобы понять — какое решение наиболее оптимально. В общем, вопрос пока открыт.

Обсудить в телеграм!