Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Операции, использующие значения даты и времени
Операции, использующие значения даты и времени
Использование арифметических операций в манипулировании данными, в вычислениях и в отношениях между двумя датами были ранее рассмотрены в разд. "Интервал времени" этой главы. Возможность вычитания значения более ранней даты, времени или даты-времени из более поздней существует благодаря способу хранения типов дата и время в Firebird. Способ хранения использует одно или два 32-битовых целых для даты/времени, только для даты или только для времени дня. Данные, представленные в этих числах, являются днями в длинном слове даты и дробной частью дней в слове времени. Дата представлена количеством дней с "нулевой даты"- 17 ноября 1898 г[26]. Время представлено в десятитысячных долях секунд, прошедших с полуночи.
В диалекте 3 DATE хранит только дату. В диалекте 3 TIME хранит только время. TIMESTAMP и в диалекте 1 DATE хранят обе части.
С этими числовыми структурами можно довольно просто оперировать, используя несложные выражения сложения и вычитания для вычисления разницы во времени (интервал), увеличения или уменьшения дат, установления диапазонов даты или времени. В табл. 10.7 описываются доступные операции и получаемые результаты.
Таблица 10.7. Арифметические операции для типов данных даты и времени
Операнд 1 |
Оператор |
Операнд 2 |
Результат |
DATE |
+ |
TIME |
TIMESTAMP (арифметическая конкатенация) |
DATE |
+ |
Числовое значение n** |
DATE, увеличенная на n целых дней (игнорируется дробная часть n, если указана) |
TIME |
+ |
DATE |
TIMESTAMP (арифметическая конкатенация) |
TIME |
+ |
Числовое значение n** |
TIME, увеличенное на n секунд* |
TIMESTAMP |
+ |
Числовое значение n** |
TIMESTAMP, где дни увеличены на целую часть числа n плюс дробная часть числа n (если указана) как количество десятитысячных долей секунды в дне (8.64 x 10(^5^)) |
DATE |
- |
DATE |
Количество дней в интервале: DECIMAL(9,0) |
DATE |
- |
Числовое значение N** |
DATE, уменьшенная на n дней (игнорируется дробная часть n, если указана) |
TIME |
- |
TIME |
Количество секунд в интервале: DECIMAL(9,4) |
TIME |
- |
Числовое значение n** |
TIME, уменьшенное на n секунд* |
TIMESTAMP |
- |
TIMESTAMP |
Количество дней и части дня в интервале: DECIMAL (18, 9) |
TIMESTAMP |
- |
Числовое значение n** |
TIMESTAMP, где дни уменьшены на целую часть числа n плюс дробная часть числа n (если указана) как количество десятитысячных долей секунды в дне (8.64x10(^5^)) |
* При необходимости повторяется (result=modulo(result, (24*60*60))) пока не будет выделена результирующая часть дней.
** В диалекте 3 для типа DATE n является целым, представляющим количество дней. Для типов данных TIMESTAMP и для диалекта 1 DATE n может быть числом, представляющим количество дней слева от десятичной точки (целая часть) и части дня справа от десятичной точки (дробная часть). Для типа TIME n является целым числом, представляющим количество секунд.
- ГЛАВА 10. Типы даты и времени.
- 6.1. Времена и даты
- Что делать, если при установке принтера появляется сообщение Невозможно завершение операции. Подсистема печати недоступн...
- Уменьшение времени, необходимого для резервного копирования и восстановления
- Выражения в значениях по умолчанию для доменов
- Ограничение времени ожидания для транзакций (Lock timeout)
- Значения переменных по умолчанию
- Операции с множествами узлов
- 7.12. Объективизация времени
- 1. Пустые значения (Empty-значения)
- 2. Неопределенные значения (Null-значения)
- 3. Null-значения и общее правило вычисления выражений