Функция DATEDIFF, страница 2

Задача. Изчислете броя на минутите между две дати - '2011-10-07 23:43:00' и '2011-10-08 01:23:00'

SQL сървър

Вградената функция DATEDIFF решава проблема:

Резултатът е 100 минути.

Заявката използва стандартното представяне на дата (ISO) под формата на текстов низ 'yyyy-mm-ddThh:mm:ss', който не зависи нито от локалните настройки на сървъра, нито от самия сървър.

Функцията DATEDIFF също е налична в MySQL, но има много различно значение. DATEDIFF изчислява броя на дните между две дати, дадени като аргументи на тази функция. В този случай, ако датата е представена във формат дата-час, се използва само компонентът за дата. Следователно и трите заявки по-долу ще дадат един и същ резултат -1. Положителен резултат ще бъде получен, ако първият аргумент е по-голям от втория.

Ще получим един ден, дори ако интервалът между датите е само една секунда:

Решението на нашия проблем може да бъде получено с помощта на друга вградена функция - TIMESTAMPDIFF, която е подобна на функцията DATEDIFF в Structured Query Language) - универсален компютърен език, използван за създаване, модифициране и управление на данни в релационни бази данни. SQL сървър:

PostgreSQL

В PostgreSQL няма функция като DATEDIFF (SQL Server) или TIMESTAMPDIFF (MySQL). Следователно, за да разрешите проблема, можете да приложите следната последователност от действия:

  1. представят разликата между две дати като интервал;
  2. пребройте броя на секундите в интервала;
  3. разделете стойността, получена в стъпка 2, на 60, за да изразите резултата в минути.

За да получите интервал, можете да вземете разликата от две стойности от времеви тип. Това изисква изричнотип преобразуване:

Резултатът е "01:40:00", което не е нищо друго освен един час и четиридесет минути.

Можете също така да използвате вградената функция AGE, която извършва имплицитно преобразуване на типа на своите аргументи едновременно:

За да получите броя секунди в интервал, използвайте функцията

Представяме стойността на интервала по последния начин като най-кратък. За да получим окончателното решение на задачата, разделяме резултата на 60:

В този случай имаме целочислен резултат, тъй като и двете времеви стойности в задачата не съдържат секунди. В противен случай ще бъде върнато десетично число, например: 99.75:

Oracle също няма функции от тип DATEDIFF в своя арсенал. Освен това Oracle не поддържа стандартното текстово представяне на дати/часове.

Можем да изчислим интервала в минути, като вземем предвид, че разликата в датите (стойности от тип date ) в Oracle води до броя дни (дни). След това, за да изчислите интервала в минути, просто трябва да умножите разликата в датата по 24 (броя часове в деня) и след това по 60 (броя минути в един час):

Други времеви интервали могат да бъдат получени по подобен начин.