Контекстные переменные даты/времени основаны на времени сервера, которое может отличаться от внутреннего времени на клиенте.
Следующий оператор возвращает время сервера в момент, когда сервер обслуживает запрос клиента Firebird:
SELECT CURRENT_TIME AS TIME_FINISHED FROM RDB$DATABASE;
В следующем операторе добавления идентификатор текущей транзакции, текущие серверные дата и время, а также имя пользователя системы будут записаны в таблицу:
INSERT INTO TRANSACTIONLOG(TRANS_ID, USERNAME, DATESTAMP) VALUES (
CURRENT_TRANSACTION,
CURRENT_USER,
CURRENT_TIMESTAMP) ;
Предопределенные литералы даты
Литералы даты - заключенные в апострофы строки, которые Firebird SQL будет воспринимать как специальные даты. В диалекте 1 эти строки используются напрямую, в диалекте 3 они должны быть преобразованы в соответствующий тип. В табл. 8.2 показано использование дат в каждом диалекте.
Таблица 8.2. Список предопределенных литералов даты
Литерал даты |
Подставляемая дата |
Тип данных, Диалект 1 |
Тип данных, Диалект 3 |
'NOW' |
Текущая дата и время |
DATE (эквивалентно TIMESTAMP в диалекте 3) |
TIMESTAMP |
'TODAY' |
Текущая дата |
DATE с нулевым временем |
DATE (только дата) |
'YESTERDAY' |
Текущая дата -1 |
DATE c нулевым временем |
DATE |
'TOMORROW' |
Текущая дата + 1 |
DATE с нулевым временем |
DATE |
! ! !
ПРИМЕЧАНИЕ. В диалекте 1 тип данных DATE эквивалентен типу данных TIMESTAMP в диалекте 3. В диалекте 3 тип данных DATE содержит только дату. В диалекте 1 нет эквивалентного типа.
. ! .
Примеры использования предопределенных литералов даты
В диалектах базы данных 1 и 3 литерал даты должен быть преобразован в тип данных TIMESTAMP:
SELECT CAST ('NOW' AS TIMESTAMP) AS TIME_FINISHED FROM RDB$DATABASE;
Следующий оператор UPDATE устанавливает значение столбца даты в серверную дату плюс один день в диалекте 1:
UPDATE TABLE_A
SET UPDATE_DATE = 'TOMORROW'
WHERE KEY_ID = 144;
Вот та же самая операция в диалекте 3 с преобразованием типа:
UPDATE TABLE_A
SET UPDATE_DATE = CAST('TOMORROW' AS DATE)
WHERE KEY_ID = 144;
Данные в таких реляционных системах баз данных, как Firebird, логически упорядочены в виде множества строк и столбцов. Столбец хранит один элемент данных с атрибутами, идентичными для всех строк в наборе. Определение столбца имеет два обязательных атрибута: идентификатор (или имя столбца) и тип данных. Другие атрибуты могут быть включены в определение столбца, например, CHARACTER SET и ограничения типа NOT NULL и UNIQUE.
Множества, определенные для хранения данных, называются таблицами. Структура строк таблицы определяется при объявлении идентификатора таблицы; эта структура является списком идентификаторов столбцов, их типов данных и других необходимых атрибутов.
Простой пример объявления таблицы:
CREATE TABLE SIMPLE
( COLUMN1 INTEGER,
COLUMN2 CHAR(3),
COLUMN3 DATE);
Полное описание объявления таблиц и столбцов см. в главе 16.
В Firebird вы можете сделать предварительное объявление столбца с типом данных и "шаблонным набором" атрибутов в виде домена. Как только домен будет создан и подтвержден (commit), он может быть использован в любой таблице вашей базы данных, как если бы он был типом данных.
! ! !
ПРИМЕЧАНИЕ. Существуют некоторые ограничения по использованию доменов. В частности, домен не может применяться в объявлении локальных переменных, входных и выходных аргументов в модулях PSQL (язык процедур).
. ! .
Столбцы, основанные на домене, наследуют все атрибуты домена: его тип данных, другие атрибуты, включая значение по умолчанию, ограничения на значения, набор символов и порядок сортировки.
Любой атрибут за исключением типа данных может быть переопределен при использовании домена в определении столбца при определении таблицы путем замены атрибута на другой совместимый атрибут или при добавлении атрибута. Например, можно объявить домен с набором атрибутов, не включающих NOT NULL, для которого можно сделать допустимым пустое значение в одних случаях, a NOT NULL в других.
Более подробную информацию о создании, использовании и поддержке доменов см. в главе 13.
Преобразование типов данных
Обычно вы должны использовать совместимые типы данных при выполнении арифметических операций или при сравнении данных в условиях поиска. Если вам нужно выполнить операции над смешанными типами данных, или если ваш язык программирования использует типы данных, которые не поддерживаются в Firebird, то необходимо выполнить преобразование типов данных до выполнения операций с базой данных.
Читать дальше