Функции Transact-SQL для работы со строками и данными типа даты/времениФункции T-SQL для работы со значениями даты и времениФункция DATEDIFF стр. 2 |
|||||
Задача. Посчитать число минут в интервале между двумя датами – '2011-10-07 23:43:00' и '2011-10-08 01:23:00' SQL ServerВстроенная функция DATEDIFF решает проблему:
Результат – 100 минут.
Примечание:
В запросе используется стандартное представление даты (ISO) в виде текстовой строки 'yyyy-mm-ddThh:mm:ss', которое не зависит ни от локальных настроек сервера, ни и от самого сервера. MySQLФункция DATEDIFF есть и в MySQL, однако она имеет совсем другой смысл. DATEDIFF вычисляет число дней между двумя датами, являющихся аргументами этой функции. При этом если дата представлена в формате дата-время, используется только составляющая даты. Поэтому все три нижепредставленных запроса дадут один и тот же результат -1. Положительный результат будет получен, если первый аргумент больше второго.
Один день мы получим даже в случае, если интервал между датами составляет все одну секунду:
Решение же нашей задачи можно получить при помощи другой встроенной функции – TIMESTAMPDIFF, которая аналогичная функции DATEDIFF в Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных.
SQL Server:
PostgreSQLВ PostgreSQL нет функции, подобной DATEDIFF (SQL Server) или TIMESTAMPDIFF (MySQL). Поэтому для решения задачи можно применить следующую последовательность действий:
Для получения интервала можно взять разность двух значений темпорального типа, При этом требуется явное преобразование типа:
Результат - "01:40:00", который есть не что иное, как один час и сорок минут. Можно также воспользоваться встроенной функцией AGE, которая выполняет заодно неявное преобразование типа своих аргументов:
Для получения числа секунд в интервале воспользуемся функцией
Значение интервала представим последним способом как наиболее коротким. Для получения окончательного решения задачи поделим полученный результат на 60:
В данном случае мы имеем результат, выраженный целым числом, поскольку оба значения времени в задаче не содержали секунд. В противном случае, будет получено десятичное число, например: 99.75:
OracleOracle тоже не имеет в своем арсенале функции типа DATEDIFF. Кроме того, Oracle не поддерживает стандартное текстовое представление даты/времени. Мы можем посчитать интервал в минутах, приняв во внимание, что разность дат (значений типа date) в Oracle дает в результате число дней (суток). Тогда для вычисления интервала в минутах нужно просто разность дат умножить на 24 (число часов в сутках), а затем на 60 (число минут в часе):
Подобным образом можно получить и другие временные интервалы.
|