Математичні Операції У Субд Interbase
Працюючи з базами даних часто доводиться мати справу з даними, що представляють дату чи час. Будь то студент, який пише курсову роботу, або database administrator, який розробляє розподілену систему для будь-якого промислового виробництва, їм у будь-якому випадку доводиться розраховувати часові інтервали, затримки, тривалості будь-яких процесів.
У статті розглянемо різні практичні прийоми розрахунків з використанням типів даних Time і Timestamp.
Почнемо ми із простих прикладів. Допустимо, що ми пишемо програму, в якій нам необхідно обчислити кількість днів між двома подіями, дата яких задана у базі даних типом Data або TimeStamp. У цьому випадку нам доведеться від одного значення просто відняти інше. Наприклад
select Current_TimeStamp - cast ('yesterday' as timestamp) від Table1
В результаті такого запиту отримаємо значення з плаваючою точкою більше одиниці, тому що вираз cast ('yesterday' as timestamp) повертає значення "24:00 вчорашнього дня". Якщо віднімати значення типу Time, то отримаємо результат за секунди. Наприклад запит
select current_time - cast('0:00' as time) from Table1
поверне кількість секунд після опівночі. Дані приклади дуже прості і вони не повинні викликати жодних труднощів. А тепер розглянемо складніші завдання, коли необхідно дізнатися, наприклад, часовий інтервал між двома значеннями дати-часу і отримати результат також у вигляді часу, а не в кількості днів або секунд, або коли необхідно обчислити різницю у вигляді типу Timestamp між двома датами, або необхідно від типу Date відібрати тип Time, або обчислити середнє значення або суму кількох значень Time або Timestamp. Поступово відповідатимемо на найчастіші питання.
Як отримати різницюміж двома змінними типу Time у вигляді змінної типу Time?
Отримати інтервал між двома значеннями типу Time можна в такий спосіб. Спочатку відняти з одного значення інше, а потім додати результат до «півночі». Наприклад, щоб дізнатися, скільки часу залишилося до певної події, потрібно виконати запит
select cast('0:00' as time)+(cast('17:00' as time)-current_time) from Table1
Як отримати різницю між двома змінними типу Timestamp у вигляді змінної типу Time?
Щоб отримати інтервал між двома змінними типу Timestamp, потрібно відняти з першого значення друге, помножити результат на кількість секунд в дні і додати результат до півночі. Наступний приклад показує скільки часу залишається до святкового салюту (за умови, що сьогодні 9 травня).
select cast('0:00' as time) + (cast('5/9/02 21:00' as timestamp) - current_timestamp)*24*60*60 from table1
Як отримати різницю типу Timestamp між двома датами, заданими як Timestamp?
select cast('12/31/99' as timestamp) + (cast('10/19/08 13:47' as timestamp) - cast('10/11/08 1:01' as timestamp)) from table1
Як відняти або додати змінну типу Time до дати, заданої як змінна типу Timestamp?
Щоб вирішити цю задачу, необхідно відняти «північ» від часу типу Time, а потім результат відняти або додати до дати, заданої як Timestamp. Наступний приклад розраховує, скільки часу буде через 2 години.
select current_timestamp + (cast('2:00' as time) - cast('0:00' as time))/(60*60*24) from table1;
Як забирати або додавати частини доби до змінної типу Timestamp?
Потрібно просто додати або відібрати від змінної типу Timestamp кількість секунд. Цей приклад показує, яка буде дата та часчерез 2 години.
select current_timestamp + (2.0 / 24.0) від table1
Як віднімати та додавати комбінації дата-час?
Коли складаються дата і час, результат представляється як тип Timestamp і після цього з ним можна працювати як завжди. Приклад показує, яка дата та час були вчора.
select current_date + current_time - 1 від table1;
Як розрахувати середнє значення чи суму стовпця, що містить час?
Для початку необхідно створити поле типу Time, що містить кількість секунд після опівночі, а потім обчислити середнє або суму цього стовпця і додати результат до півночі.
select cast('0:00' as time) + avg(seconds) from times