Архивы: oracle

PL/SQL: Полезные функции

Здесь будет памятка по интересным функциям, которые я использовал в своих sql-запросах:

  • age(table1.date)
    Показывает разницу между переданной функцию датой и текущей датой (в формате: кол-во лет, месяцев, дней, часов, минут, секунд).
  • extract(dow from table1.date)
    Получаем день недели в числовом представлении, где началом недели будет являться воскресенье (дни пронумерованы от 0 до 6).
  • extract(isodow from table1.date)
    Получаем день недели в числовом представлении, где началом недели будет являться понедельник (дни пронумерованы от 1 до 7).
  • ST_Centroid(table1.geometry)
    Получаем центр области, обозначенной последовательностью точек (мультилиния, полигон, мультиполигон).
  • ST_X(ST_Centroid(table1.geometry))
    Получаем координату X точки, полученной на предыдущем этапе.
  • ST_Y(ST_Centroid(table1.geometry))
    Получаем координату Y точки, полученной на предыдущем этапе.
  • coalesce(значение1, значение2, значение3)
    Возвращает первое значение из перечисленных, не равное NULL. Если все перечисленные значения будут равны NULL, то результатом тоже вернется значение NULL.

PL/SQL: Количество минут между двумя датами

В рамках одной задачи возникла необходимость посчитать время между двумя датами в PL/SQL-запросе. Ситуация осложнилась тем, что в PL/SQL существует функция months_between, но с помощью нее разницу можно получить только в месяцах, тогда как мне требовался более точный результат — в минутах.

В результате было найдено такое решение:
extract(day from sum("table"."date2" - "table"."date1")) * 1440 + extract(hour from sum("table"."date2" - "table"."date1")) * 60 + extract(minute from sum("table"."date2" - "table"."date1"))