Введение в стандарты языка баз данных SQL

Типы дата-время и интервальные типы


Начнем с того, по какой причине в языке SQL появились эти типы данных (все вместе их можно было бы назвать темпоральными типами, т.е. типами, связанными со временем). В принципе, таблицы реляционных баз данных являются плоскими; каждая строка таблицы соответствует текущему состоянию моделируемого объекта предметной области. Однако на практике часто возникает потребность хранить в одной таблице информацию о состоянии объектов в разные моменты времени. До появления в языке темпоральных типов это можно было реализовать только одним способом: ввести в таблицу дополнительный столбец, в котором хранились бы временные метки создания соответствующих строк. Но если нет унифицированного представления таких временных меток, то вся логика их обработки уходит в прикладную программу, и другая прикладная программа не сможет работать с той же базой данных, если эта логика не будет в нее перенесена. Так что идея очень проста: унифицировать и сделать понятным системе смысл временных меток и временных интервалов.

Однако механизм, предлагаемый в стандарте SQL/92, очень громоздок по причине большого количества несущественных по смыслу деталей: с какой точностью сохранять временные метки и интервалы, как задать временную зону, в которой они возникают и т.д. Поэтому мы рассмотрим особенности этих типов очень коротко (соответствующие спецификации составляют значительную часть громадного документа).

Элемент типа дата-время составляется из смежного поднабора полей:

YEARГод от Рождества Христова
MONTHМесяц в пределах года
DAYДень в пределах месяца
HOURЧас в пределах дня
MINUTEМинута в пределах часа
SECONDСекунда и, возможно, доли секунды в пределах минуты

Реальный смежный поднабор полей, составляющих элемент типа дата-время определяется квалификатором дата-времени, называемым точностью элемента. Имеется подразумеваемая упорядоченность полей YEAR, MONTH, DAY, HOUR, MINUTE, SECOND. Значения каждого поля ограничиваются естественными правилами, регулирующими законные даты и время.

Элемент типа INTERVAL составляется из смежного поднабора полей:

YEARГода
MONTHМесяца
<


или
DAYДни
HOURЧасы
MINUTEМинуты
SECONDСекунды и, возможно, доли секунд
Реальный смежный поднабор полей, составляющих элемент типа интервал, определяется квалификатором дата-времени, называемым точностью элемента.

Внутри элемента типа интервал первое поле не ограничивается. Последующие поля ограничиваются следующим образом:
MONTHМесяцы в пределах года (0-11)
DAYНе ограничивается
HOURЧасы в пределах дня (0-23)
MINUTEМинуты в пределах часа (0-59)
SECONDСекунды в пределах минуты (0-59.999...)
Над значениями темпоральных типов могут выполняться арифметические операции, смысл которых определяется следующей таблицей:
Тип первого операндаОператорТип второго операндаТип результата
Datetime-DatetimeInterval
Datetime+ или -IntervalDatetime
Interval+DatetimeDatetime
Interval+ или -IntervalInterval
Interval* или /NumericInterval
Numeric*IntervalInterval
Арифметические операции, включающие даты и времена, подчиняются обычным правилам, связанным с датами и временами, и производят допустимые результирующие даты и времена.


Содержание раздела