Вход/Регистрация
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
вернуться

Борри Хелен

Шрифт:

Общие правила для операций

Одно значение даты или времени может быть вычтено из другого, если:

* оба значения имеют один и тот же тип даты/времени;

* первый операнд является более поздним, чем второй.

Вычитание, использующее типы дата/время, дает результаты: масштабируемое DECIMAL в диалекте 3 и DOUBLE PRECISION В диалекте 1.

Типы данных дата/время не могут складываться друг с другом. Однако можно выполнить конкатенацию части даты и части времени, используя:

* дополнительный бинарный синтаксис для конкатенации пар полей или переменных;

* объединение строк для конкатенации литерала дата/время с другим литералом дата/время или с полем, или переменной типа дата/время.

Операции умножения и деления, включающие типы данных дата/время, недопустимы.

Выражения в качестве операндов

Операндом при увеличении или уменьшении значения TIMESTAMP, TIME, DATE или DATE в диалекте 1 может быть константа или выражение. Выражение может быть особенно полезным в ваших приложениях, когда вам надо увеличить или уменьшить значение в секундах, минутах, часах или, например, требуется половина дня, а не целое количество дней.

Диалект 3 использует правило SQL-92 для деления целого на целое: результатом всегда будет целое, округленное при необходимости в меньшую сторону. При использовании выражений в диалекте 3 убедитесь, что один из операндов является действительным числом с достаточным количеством десятичных знаков, чтобы избежать возможной арифметической ошибки или потери точности результата при выполнении целочисленного деления SQL-92.

В табл. 10.8 показаны некоторые примеры.

Таблица 10.8. Примеры использования выражений в качестве операндов

Вводимый операнд n

Сложение или вычитание

Альтернатива

В секундах

n/86400.0

(n*1,0)/(60* 60*24)

В минутах

n/1440.0

(n*1.0)/(60*24)

В часах

n/24.0

Зависит от желаемого результата. Например, если n=3, а делитель для половины дня - 2, результат будет 1, а не 1.5

Половина дня

n/2

То же

Поскольку годы, месяцы, кварталы не являются константами, нужны более сложные алгоритмы для их использования в операциях даты/времени. Возможно, вам следует для этих целей посмотреть функции, определенные пользователем (UDF), которые вы сможете использовать в качестве выражений в операндах.

Использование CAST с типами дата/время

В некоторых местах этой главы вы встречали функцию CAST в выражениях, содержащих типы данных даты и литералы даты. В настоящем разделе рассматриваются различные аспекты преобразования даты и времени более широко и подробно.

Преобразование между типами дата/время

Обычно преобразование из одного типа дата/время в другой возможно, если исходный тип дата/время содержит подходящий вид данных для помещения в выходной тип дата/время. Например, TIMESTAMP содержит данные, которые можно преобразовать в тип только даты DATE или только время TIME, В то время как тип TIME не содержит достаточно данных для преобразования в тип DATE. Firebird предоставляет возможность преобразовывать тип DATE В TIMESTAMP, присваивая времени значение полночи, и тип TIME в TIMESTAMP, выбирая дату из контекстной переменной CURRENT_DATE (серверное время). В табл. 10.9 представлены правила преобразования.

Таблица 10.9. Преобразования между типами дата/время в диалекте 3

Исходный тип

В тип TIMESTAMP

В тип DATE

В тип TIME

TIMESTAMP

Недоступно

Да, преобразует дату, игнорируя время

Да, преобразует время, игнорируя дату

DATE

Да, время устанавливается в значение полночи

Недоступно

Нет

TIME

Да, дате присваивается значение CURRENT_DATE

Нет

Недоступно

DATE + TIME

Да, CAST ( (DATEFIELD + TIMEFIELD AS TIMESTAMP)

Нет

Нет

Преобразование типов даты в CHAR(n) и VARCHAR(n)

Используйте в операторах SQL-функцию CAST для трансляции данных даты и времени в символьные типы данных.

Firebird преобразует типы дата и время в форматированные строки, в которых дата (если присутствует) представлена в установленном формате - в зависимости от диалекта - а время представлено в стандартном для Firebird формате: HH:MM:ss.nnnn. Необходимо использовать столбец, переменную типа CHAR или VARCHAR подходящего размера для получения желаемого вами результата.

  • Читать дальше
  • 1
  • ...
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: