Математичні Операції В Субд Interbase

Працюючи з базами даних дуже часто доводиться мати справу з даними, що представляють дати або час. Будь то студент, пише курсову роботу, або database administrator, розробляє розподілену систему для якого-небудь промислового виробництва, що їм у будь-якому випадку доводиться розраховувати часові інтервали, затримки, тривалості будь-яких процесів.
У статті розглянемо різні практичні прийоми розрахунків з використанням типів даних Time і Timestamp.
Почнемо ми з простих прикладів. Припустимо, що ми пишемо програму, в якій нам необхідно обчислити кількість днів між двома подіями, дата яких задана в базі даних типу Data або TimeStamp. У цьому випадку нам доведеться з одного значення просто відняти інше. Наприклад
select Current_TimeStamp – cast (‘yesterday’ as timestamp) from 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?
Для вирішення такого завдання потрібно з першого значення типу Timestamp відняти друге і додати результат до дати, яку будемо вважати точкою відліку. Візьмемо, приміром, за нульовий день 31 грудня 1999 року і розрахуємо час у дорозі поїзда Москва – Владивосток, який відправляється з вокзалу Москва Ярославская 11 жовтня 2008 року у 01:01, а прибуває у Владивосток 19 жовтня 2008 року о 13:47. В результаті виконання наступного запиту
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
отримаємо результат 8 днів, 12 годин і 46 хвилин (від нульового дня 31 грудня 1999 року в даному випадку).
Як відняти або додати змінну типу 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) from table1
Як віднімати і додавати комбінації дата-час?
Коли складаються дата і час, результат представляється як тип Timestamp і після цього з ним можна працювати як звичайно. Приклад показує, яка дата та час були вчора.
select current_date + current_time – 1 from table1;
Як розрахувати середнє значення або суму стовпця, що містить час?
Для початку необхідно створити поле типу Time, що містить кількість секунд після опівночі, а потім обчислити середнє або суму цього стовпця і додати отриманий результат до півночі.
select cast(‘0:00’ as time) + avg(seconds) from times