Московский государственный университет имени М.В.Ломоносова
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 8465 / 635 | Оценка: 3.85 / 3.50 | Длительность: 22:03:00
Лекция 1:

Общее введение, типы данных и средства определения доменов

Лекция 1: 123456 || Лекция 2 >

Типы битовых строк

В SQL определены три параметризуемых типа битовых строк: BIT, BIT VARYING и BINARY LARGE OBJECT (или BLOB ).

  • Тип BIT. Значениями типа являются битовые строки. При определении столбца допускается использование спецификаций BIT (x) и просто BIT. Последний вариант эквивалентен заданию BIT (1). После определения столбца типа BIT (x) СУБД будет резервировать место для хранения x бит этого столбца во всех строках соответствующей таблицы.
  • Тип BIT VARYING. При определении столбца допускается использование только спецификации без умолчания вида BIT VARYING (x), где значение x определяет максимальную длину битовой строки, которую можно хранить в данном столбце.
  • Над битовыми строками определен ряд операций. Некоторые из них мы рассмотрим.
    • Битовая конкатенация (обозначается в виде || ), которая возвращает результирующую битовую строку, полученную путем конкатенации строк-аргументов в том порядке, в котором они заданы.
    • Функция извлечения подстроки из битовой строки. Синтаксис и семантика этой функции идентичны синтаксису и семантике функции SUBSTRING для символьных строк, за исключением того, что первый аргумент и возвращаемое значение являются битовыми строками.
    • Функция определения длины ( OCTET_LENGTH, BIT_LENGTH ) возвращает длину заданной битовой строки в октетах или битах в зависимости от выбранной функции.
    • Функция определения позиции ( POSITION ) определяет первую позицию в битовой строке   S, с которой в нее входит строка S1. Если строка S1 не входит в строку S, возвращается значение нуль.
  • Тип BINARY LARGE OBJECT. Этот тип данных предназначен для определения столбцов, хранящих большие и разные по размеру группы байтов. При определении столбца задается спецификация BLOB (z), где z задает максимальный размер соответствующей группы байтов. С технической точки зрения типы CLOB и BLOB очень похожи. Их разделение требуется для того, чтобы подчеркнуть, что значения типа CLOB состоят из символов (в частности, в них может осмысленно производиться текстовый поиск), а значения типа BLOB состоят из произвольных байтов, не обязательно кодирующих символы.
  • Литералы   типов битовых строк представляются как заключенные в одинарные кавычки последовательности символов " 0 " и " 1 ", предваряемые символом " B "; или предваряемые символом " X " последовательности символов, которые изображают шестнадцатеричные цифры (за цифрой " 9 " следуют " A ", " B ", " C ", " D ", " E " и " F "). Примеры литералов   типов битовых строк: B’0111001111000111111111’, X’78FBCD0012FFFFA’. 16В литерале   BLOB всегда должно содержаться четное число шестнадцатиричных цифр.

Типы даты и времени

Возможность сохранения в базе данных информации о дате и времени очень важна с практической точки зрения. Достаточно вспомнить взбудоражившую весь мир "проблему 2000 года", одним из основных источников которой было некорректное хранение дат в базах данных. В стандарте SQL поддержке средств работы с датой и временем уделяется большое внимание. В частности, поддерживаются специальные "темпоральные" типы данных DATE, TIME, TIMESTAMP, TIME WITH TIME ZONE и TIMESTAMP WITH TIME ZONE. Коротко обсудим эти типы.

Тип даты
  • Тип DATE. Значения этого типа состоят из компонентов-значений года, месяца и дня некоторой даты. Значение года состоит из четырех десятичных цифр и соответствует летоисчислению от Рождества Христова до 9999 г. Значение месяца состоит из двух десятичных цифр и варьируется от 01 до 12. Значение номера дня месяца состоит из двух десятичных цифр и варьируется от 01 до 31, хотя значение месяца даты может накладывать ограничения на возможность использования значений дня месяца 29, 30 и 31. В стандарте SQL не накладываются какие-либо ограничения на внутренний способ представления дат, используемый в реализации. При определении столбца типа DATE указывается просто DATE.
  • Литералы типа DATE представляются в виде строки " ’yyyy-mm-dd’ ", где символы y, m и d должны изображать десятичные числа. Например, литерал   DATE ’1949-04-08’ представляет дату 8 апреля 1949 г.
Типы времени
  • Тип TIME. Значения этого параметризованного типа состоят из компонентов-значений часа, минуты и секунды некоторого времени суток. Значение часа состоит ровно из двух десятичных цифр и варьируется от 00 до 23. Значение минуты состоит из двух десятичных цифр и варьируется от 00 до 59. Основное значение секунды также состоит из двух цифр, но может включать дополнительные цифры, представляющие доли секунды. Так что в целом значение секунды варьируется от 00 до 61.999... В значении времени присутствуют две лишние секунды, поскольку Всемирная служба времени иногда добавляет две секунды к последней минуте года для синхронизации мирового времени с реальным. Решение о поддержке этих "високосных" секунд принимается на уровне реализации. Число цифр в доле секунды также определяется в реализации. В стандарте требуется только то, чтобы это число было не меньше шести. При определении столбца типа TIME может указываться TIME (p) (значение p задает точность долей секунды) или просто TIME (в этом случае доли секунды не учитываются).
  • Литералы типа   TIME представляются в виде строки TIME ’hh:mm-ss:f...f’, где символы h, m, s и f должны изображать десятичные числа. Например, литерал   TIME ’16:33-20:333’ представляет время суток 16 часов 33 минуты 20 и 333 тысячных секунды.
Типы временной метки
  • Тип TIMESTAMP. Значения этого параметризованного типа состоят из компонентов — значений года, месяца и дня некоторой даты, а также компонентов — значений часа, минуты и секунды некоторого времени суток (т. е. каждое значение задает некоторую абсолютную временную метку – отсюда название типа TIMESTAMP ). Число десятичных цифр в значениях-компонентах и ограничения этих значений такие же, как у значений типов DATE и TIME. При определении столбца типа TIMESTAMP может указываться TIMESTAMP (p) (значение p задает точность долей секунды) или просто TIMESTAMP (в этом случае, в отличие от типа данных TIME, по умолчанию принимается, что в доли секунды используются шесть десятичных цифр). Максимально допустимое значение p определяется в реализации.
  • Литералы типа   TIMESTAMP представляются в виде строки TIMESTAMP ’yyyy-mm-dd hh:mm-ss:f...f’, где символы y, m, d, h, m, s и f должны изображать десятичные числа. Например, литерал   TIMESTAMP ’1949-04-08 16:33-20:333’ представляет временную метку 16 часов 33 минуты 20 и 333 тысячных секунды 8 апреля 1949 г.
Типы времени и временной метки с временной зоной
  • Тип TIME WITH TIME ZONE. Этот тип данных похож на тип TIME с тем лишь отличием, что значения типа TIME WITH TIME ZONE включают дополнительный компонент — значение, характеризующее смещение соответствующего времени относительно гринвичского времени (теперь его называют UTC – universal time coordinated). Деталей представления этого дополнительного компонента мы касаться не будем.
  • Тип TIMESTAMP WITH TIME ZONE. Этот тип данных отличается от типа TIMESTAMP тем, что значения типа TIMESTAMP WITH TIME ZONE включают дополнительный компонент-значение, характеризующее смещение соответствующего времени относительно гринвичского.
Типы временных интервалов

Вообще говоря, временным интервалом называется разность между двумя значениями даты или времени. В SQL определены две категории типов временных интервалов: "год-месяц" и "день-время суток". Временные интервалы языка SQL не привязываются к начальному и/или конечному значению даты/времени, а описывают только протяженность во времени. В общем случае при определении столбца типа временного интервала указывается INTERVAL start (p) [ TO end (q) ], где в качестве " start " и " end " могут задаваться YEAR, MONTH, DAY, HOUR, MINUTE и SECOND. Параметр p задает требуемую точность лидирующего поля интервала (число десятичных цифр). Параметр q может задаваться только в том случае, когда в качестве end используется SECOND, и указывает точность долей секунды. Если говорить более точно, возможны следующие вариации типов временных интервалов.

  • Типы категории "год-месяц". Можно определить столбцы следующих типов: INTERVAL YEAR, INTERVAL YEAR (p) (значения этих типов – временные интервалы в годах), INTERVAL MONTH, INTERVAL MONTH (p) (значения этих типов – временные интервалы в месяцах), INTERVAL YEAR TO MONTH, INTERVAL YEAR (p) TO MONTH (значения этих типов – временные интервалы в годах и месяцах). Если значение параметра p не указывается явно, по умолчанию принимается его значение "2".
  • Типы категории "день-время суток". При определении столбца можно использовать следующие комбинации (для полноты перечислим все возможности):
    INTERVAL DAY (p), 
    INTERVAL DAY, 
    INTERVAL DAY (p) TO HOUR, 
    INTERVAL DAY TO HOUR, 
    INTERVAL DAY (p) TO MINUTE, 
    INTERVAL DAY TO MINUTE, 
    INTERVAL DAY (p) TO SECOND (q), 
    INTERVAL DAY TO SECOND (q), 
    INTERVAL DAY (p) TO SECOND, 
    INTERVAL DAY TO SECOND, 
    INTERVAL HOUR (p), 
    INTERVAL HOUR, INTERVAL HOUR (p) TO MINUTE,
    INTERVAL HOUR TO MINUTE, 
    INTERVAL HOUR (p) TO SECOND (q), 
    INTERVAL HOUR TO SECOND (q), 
    INTERVAL HOUR TO SECOND, 
    INTERVAL MINUTE (p), 
    INTERVAL MINUTE, 
    INTERVAL MINUTE (p) TO SECOND (q), 
    INTERVAL MINUTE TO SECOND (q), 
    INTERVAL MINUTE (p) TO SECOND, 
    INTERVAL MINUTE TO SECOND, 
    INTERVAL SECOND (p, q),
    INTERVAL SECOND (p), 
    INTERVAL SECOND.
    Если значение параметра p не указывается явно, по умолчанию принимается его значение "2". Значением параметра q по умолчанию является "6".
  • Приведем только один пример литерала одной из разновидностей типа INTERVAL: INTERVAL ’10:20’ MINUTE TO SECONDвременной интервал в 10 минут и 20 секунд.
  • Над значениями темпоральных типов могут выполняться арифметические операции, смысл которых определяется следующей таблицей:
    Тип первого операнда Операция Тип второго операнда Тип результата
    Datetime - Datetime Interval
    Datetime + или - Interval Datetime
    Interval + Datetime Datetime
    Interval + или - Interval Interval
    Interval * или / Numeric Interval
    Numeric * Interval Interval

Значения типов данных временных интервалов образуются при вычитании одного значения типа даты или времени суток из другого значения соответствующего типа. При добавлении интервального значения к значению типа даты/времени образуется новое значение типа даты/времени. Кроме того, значение интервального типа можно умножать и делить на числовые значения, получая новое значение интервального типа.

Лекция 1: 123456 || Лекция 2 >
Алексей Ковтун
Алексей Ковтун

При попытке исполнения запроса:

CREATE DOMAIN EMP_NO AS INTEGER

    CHECK (VALUE BETWEEN 1 AND 10000);

Выдается ошибка: Неизвестный тип объекта "DOMAIN" в интсрукции CREATE, DROP или ALTER. 

Используется SQL Server MS SQL 2008R2

Александра Каева
Александра Каева