Мал. 3.31. Результат роботи функції DATEADD
Для визначення величини часового проміжку від першого заданого значення типу дата, час або дата / час до другого може використовуватися функція DATEDIFF. Ця функція повертає значення типу BIGINT і має такий вигляд:
DATEDIFF ( <временной отрезок> FROM <значение1> FOR <значение2> )
DATEDIFF ( <временной отрезок>, <значение1>, <значение2> ), Де <временной отрезок> має той же синтаксис, що і в функції DATEADD. Слід зазначити наступне:
- функція повертає позитивне число, якщо <значение2> перевищує <значение1>, негативне - якщо <значение1> перевищує <значение2>, і нуль - якщо значення рівні;
- якщо результат обчислення дробовий, то виводиться округлене значення;
- порівняння значення типу DATE зі значенням типу TIME неприпустимо;
- як і для функції DATEADD, певні часові відрізки можуть використовуватися тільки з відповідним їм типом.
Наприклад, потрібно для заявок, поданих абонентом з особовим рахунком 115705, вивести кількість тижнів, що минули з дати реєстрації заявки до моменту її виконання. Для цього варто виконати такий запит: SELECT RequestCD, DATEDIFF (WEEKDAY FROM IncomingDate
FOR ExecutionDate) AS Interval FROM Request WHERE AccountCD = 115705 ;. Результат виконання запиту представлений на рис. 3.32.
Можна також перетворювати правильно сформований рядок в тип дата-час. Наприклад, значення з типом дати з трьох значень дня, місяця і року можна отримати наступним чином:
CAST (DAY MONTH YEAR AS DATE), де DAY, MONTH і YEAR можуть являти собою константи або стовпці таблиці, в яких міститься значення дня, місяця або року відповідно.
Наприклад, якщо потрібно вивести різні значення місяця і року нарахувань за послугу газопостачання з кодом 2, віднесені на перше число відповідного місяця, то запит може виглядати наступним чином: SELECT DISTINCT NachislMonth, NachislYear,
CAST (1. NachislMonth. NachislYear as date) as FirstDay
У тих випадках, коли Firebird не може виконати неявне перетворення типів, потрібно виконувати явне перетворення за допомогою функції CAST. Ця функція виробляє перетворення значення виразу, заданого першим аргументом, в тип, заданий другим аргументом. Синтаксис функції:
CAST (<выражение> AS <тип данных>).
В якості типу даних не можна вказувати домени.
Можна використовувати функцію CAST для порівняння стовпців з різними типами даних з однієї і тієї ж таблиці або з різних таблиць.
За допомогою CAST можна виконувати перетворення з одного типу дата / час в інший. У табл. 3.3 представлені правила перетворення [18].
WHERE GazServiceCD = 2 ;.
Результат виконання запиту представлений на рис. 3.33.
Мал. 3.33. Результат роботи функції CAST
Крім того, можна перетворювати числові типи в рядок і навпаки. Наприклад, щоб при виведенні збільшити номер особового рахунку всіх абонентів на 2, потрібно виконати такий запит:
SELECT (CAST (AccountCD AS INTEGER) +2) AS New Acс, Fio
Якщо, наприклад, потрібно вивести значення нарахувань абоненту з номером особового рахунку 115705, округленими до цілого значення, то для цього варто виконати такий запит:
SELECT NachislFactCD, NachislSum,
CAST (NachislSum AS INTEGER) AS RoundSum
Результат виконання запиту представлений на рис. 3.34.
Мал. 3.34. Результат округлення числа до цілого значення за допомогою