- •Типы данных sql
- •Tочные числовые типы
- •Истинно целые типы
- •Точные типы, допускающие наличие дробной части
- •Приближенные числовые типы
- •Типы символьных строк
- •Типы битовых строк
- •Типы даты и времени
- •Тип даты
- •Типы времени
- •Типы временной метки
- •Типы времени и временной метки с временной зоной
- •Типы временных интервалов
- •Булевский тип
- •Типы коллекций
- •Типы массивов
- •Типы мультимножеств
- •Анонимные строчные типы
- •Типы, определяемые пользователем
- •Ссылочные типы
- •Типы данных PostgreSql 8.4.2
- •8.1. Числовые типы
- •8.1.1. Целочисленные типы
- •8.1.2. Числа с заданной точностью
- •8.1.3. Типы с плавающей точкой
- •8.1.4. Серийные типы
- •8.2. Денежные типы
- •8.3. Символьные типы
- •8.4. Двоичные типы данных
- •8.5. Типы дата/времени
- •8.5.6. Некоторые подробности по датам
- •8.6. Логический тип
- •8.7. Перечисления
- •8.8. Геометрические типы
- •8.9. Типы сетевых адресов
- •8.10. Типы битовых строк
- •8.11. Типы текстового поиска
- •8.11.1. Tsvector
- •8.11.2. Tsquery
- •8.12. Тип uuid
- •8.13. Тип xml
8.5. Типы дата/времени
PostgreSQL поддерживает полный список SQL типов даты и времени.
timestamp [ (p) ] [ without time zone ] 8 байт и дата и время (без часового пояса) 4713 BC 294276 AD 1 микросекунда / 14 разрядов
timestamp [ (p) ] with time zone 8 байт и дата и время с часовым поясом 4713 BC 294276 AD 1 микросекунда / 14 разрядов
date 4 байта дата (без часового пояса) 4713 BC 5874897 AD 1 день
time [ (p) ] [ without time zone ] 8 байт только время (без даты) 00:00:00 24:00:00 1 микросекунда / 14 разрядов
time [ (p) ] with time zone 12 байт время с часовым поясом 00:00:00+1459 24:00:00-1459 1 микросекунда / 14 разрядов
interval [ fields ] [ (p) ] 12 байт интервал времени -178000000 лет 178000000 лет 1 микросекунда / 14 разрядов
Для типов time, timestamp и interval можно указывать необязательное значение точности p, которое задаёт количество дробных разрядов после запятой. По умолчанию, точность в явном виде не указывается. Допустимый диапазон значения p от 0 до 6 для типа timestamp и для типа interval.
Тип time with time zone определяется стандартом SQL, но это определение говорит о свойствах, которые приводят нас к сомнениям относительно пригодности. В большинстве случаев, комбинация типов date, time, timestamp without time zone и timestamp with time zone предоставляет полный диапазон функциональности для работы с датой и временем, который бы мог потребоваться какому-либо приложению.
8.5.6. Некоторые подробности по датам
PostgreSQL использует для всех вычислений даты/времени Юлианский календарь. У него есть прекрасное свойство вычислять любую дату, которая следует за годом 4713 до н.э., потому что используется длина года, равная 365.2425 дням.
Соглашения по датам, которые использовались до 19-го века интересны, но не позволяют целостно использовать их при кодировании обработки даты/времени.
8.6. Логический тип
PostgreSQL предоставляет стандартный SQL тип boolean. Значений типа boolean может быть два: "true"(истина) или "false"(ложь). Третье состояние "unknown"(неизвестно) представляется SQL значением NULL.
Допустимые литеральные значения для "true" это:
TRUE 't' 'true' 'y' 'yes' 'on' '1'
Для "false" могут быть использованы такие значения как:
FALSE 'f' 'false' 'n' 'no' 'off' '0'
Побелы в начале и в конце игнорируются, а регистр букв значения не имеет. Предпочтительным (и соответствующим стандарту SQL) является использование ключевых слов TRUE и FALSE.
Значения boolean используют для хранения 1 байт.
8.7. Перечисления
Перечисления (enum) — это такие типы данных, которые состоят из статических, упорядоченных списков значений. Они эквивательны типам enum в некоторых языках программирования. В качестве примера типа enum можно привести дни недели или список состояний для каких-либо данных.
Типы Enum создаются с помощью команды CREATE TYPE, например:
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
Однажны созданный, тип enum может использоваться в таблицах и при определении функций точно также как и другие типы:
Порядок значений в типе enum точно такой же какой был указан при создании типа. Для перечислений поддерживаются все стандартные операции сравнения и агрегатные функции. Например:
Каждый тип перечисления является полностью отдельным типом данных и не может сравниваться с другим.
Тип enum занимает четыре байта на диске. Длина значения типа enum (текстовой метки) ограничена настройкой NAMEDATALEN, вкомпилированной в PostgreSQL; и при стандартной сборке, составляет по крайней мере 63 байта.
Значения перечислений зависят от регистра букв, так что 'happy' не тоже самое, что 'HAPPY'. Пробелы в значениях также учитываются.
Преобразования из внутренних значений перечисления в текстовые метки осуществляется в системном каталоге pg_enum. Может оказаться полезным опросить этот каталог напрямую.