| Каталог | Оглавление | Индекс раздела |
Хотя дата и время могут представляться в виде чисел или символьных строк, они не являются числами или символьными строками, а представляют собой отдельный тип данных. В представлении даты и времени и в работе с этими типами данных две рассматриваемые нами СУБД существенно различаются (DB2 ближе к общепринятым формам, Oracle основывается на собственных оригинальных концепциях), поэтому эти вопросы вынесены в отдельный справочный материал.
Типы данных
В DB2 для представления даты и времени имеются следующие типы данных
Константы даты/времени
Константы даты/времени записываются в виде строковых констант определенного формата.
DB2 поддерживает 5 вариантов формата представления даты:
| Название | Сокращение | Формат | Пример (3 марта 2001г) |
| Международная Организация Стандартов (ISO) | ISO | yyyy-mm-dd | 2000-03-21 |
| Стандарт IBM для США | USA | mm/dd/yyyy | 03/21/2000 |
| Стандарт IBM для Европы | EUR | dd.mm.yyyy | 21.03.2000 |
| Промышленный стандарт Японии | JIS | yyyy-mm-dd | 2000-03-21 |
| Локальное представление | LOC | Зависит от установленного кода страны | |
DB2 поддерживает также 5 вариантов формата представления времени:
| Название | Сокращение | Формат | Пример(13 час 9 мин 30 сек) |
| Международная Организация Стандартов (ISO) | ISO | hh.mm.ss | 13.09.30 |
| Стандарт IBM для США | USA | hh.mm AM или PM | 1:09 PM |
| Стандарт IBM для Европы | EUR | hh.mm.ss | 13.09.30 |
| Промышленный стандарт Японии | JIS | hh:mm:ss | 13:09:30 |
| Локальное представление | LOC | Зависит от установленного кода страны | |
Формат представления даты/времени устанавливается при подготовке приложения или пакета, работающего с базой данных. По умолчанию принимается формат LOC. Аббревиатура формата может также являться параметром функций преобразования типов.
Ниже приведен пример вывода даты и времени в различных форматах:
------------------------------ Command Entered ------------------------------
SELECT DISTINCT current date AS DLOC,
CHAR(current date,ISO) AS DISO,
CHAR(current date,USA) AS DUSA,
CHAR(current date,EUR) AS DEUR,
CHAR(current date,JIS) AS DJIS,
current time AS DLOC,
CHAR(current time,ISO) AS TISO,
CHAR(current time,USA) AS TUSA,
CHAR(current time,EUR) AS TEUR,
CHAR(current time,JIS) AS TJIS
from job ;
-----------------------------------------------------------------------------
DLOC DISO DUSA DEUR DJIS DLOC TISO TUSA TEUR TJIS
---------- ---------- ---------- ---------- ---------- -------- -------- -------- -------- --------
07/09/2001 2001-09-07 09/07/2001 07.09.2001 2001-09-07 11.15.50 11.15.50 11:15 AM 11.15.50 11:15:50
Представление типа TIMESTAMP не поддается форматированию и всегда представляется в виде: yyyy-mm-dd-hh.mm.ss.xxxxxx, например:
2001-09-07-11.15.50.360001
Специальные регистры
Специальные регистры CURRENT TIME, CURRENT DATE, CURRENT TIMESTAMP содержат текущее значение даты/времени, обновляемое во время выполнения на сервере SQL-оператора, обращающегося к этим регистрам (см. предыдущий пример)
Специальный регистр CURRENT TIMEZONE содержит разность между локальным временем на сервере и универсальным временем UTC (время по Гринвичу). Разность представляется в виде шестизначного десятичного числа (см. ниже - вычитание времени).
Преобразование типов
Функция приведения к типу даты - DATE - имеет один аргумент и возвращает внутреннее представление даты. Аргументом функции может быть:
Функция приведения к типу времени - TIME - имеет один аргумент и возвращает внутреннее представление времени. Аргументом функции может быть:
Данные типа даты/времени могут быть приведены к типу CHAR или VARCHAR при помощи функции CHAR. Эта функция может употребляться с одним или с двумя аргументами. В любом случае тип первого аргумента - DATE, TIME или TIMESTAMP, этот аргумент задает преобразуемое значение. Второй (необязательный) аргумент - аббревиатура формата представления даты/времени. Если тип первого аргумента - TIMESTAMP, то второй аргумент задавать нельзя. Функция возвращает строковое представление даты/времени/временного штампа в соответствии с заданным форматом (или с форматом по умолчанию - если второй аргумент не задан).
Некоторые функции, работающие с датой и временем
Все три вышеприведенные функции имеют один аргумент, которым может быть:
Первые три функции имеют один аргумент, которым может быть:
Аргументом обеих функций является дата или временной штамп или их корректное символьное представление.
Аргументом вышеприведенных трех функций является дата или временной штамп или их корректное символьное представление.
Арифметика даты/времени
Данные типов дата/время/временной штамп могут быть операндами операций увеличения, уменьшения и вычитания.
В операциях увеличения и уменьшения тип первого операнда - дата/время/временной штамп (или корректное символьное представление), тип второго операнда - именованная длительность или длительность типа, соответствующая первому операнду. Тип результата совпадает с типом первого операнда.
В операции вычитания оба операнда должны иметь одинаковый тип даты/времени/временного штампа, результат имеет тип соответствующей длительности.
Типы данных
В Oracle имеется единый тип данных DATE, хранящей для каждой величины, представленной в этом типе, значение года, месяца, дня, часов, минут и секунд. Дата и время также могут храниться в форматах CHAR и NUMBER, допускающих преобразование к типу DATE с помощью функции TO_DATE.
Функция без параметров SYSDATE возвращает текущее значение даты и времени.
Константы даты/времени и формат представления даты
Внешнее представление даты и времени - символьная константа, преобразование которой во внутреннее представление определяется форматом, заданным в NLS_DATE_FORMAT.
Спецификаторы NLS (National Language Support) - поддержка национальных языков - позволяет пользователю работать в среде с локализованными средами окружения. Параметры NLS определяют многие значения по умолчанию. От спецификаторов NLS, определяющих соглашения на среду окружения, зависят принимаемые по умолчанию аргументы ряда функций Oracle SQL, в том числе - функий TO_CHAR, TO_DATE, TO_NUMBER.
В имеющийся набор спецификаторов NLS входят, например:
Далее мы подробно рассматриваем параметр NLS_DATE_FORMAT, как имеющий наиболее непосредственное. Остальные параметры описаны "Oracle 8i SQL Reference".
Значение спецификатора NLS_DATE_FORMAT (как и всех других NLS-спецификаторов может задаваться в коныигурационном файле или в операторе ALTER SESSION:
ALTER SESSION SET NLS_DATE_FORMAT = <маска представления даты>
<маска представления даты> представляет собой строковую константу и некоторые спецификаций преобразования даты в строку или наоборот, которые она может содержать следующие:
Пример:
SQL> ALTER SESSION SET NLS_DATE_FORMAT = '"Today is" DD/MM/YYYY'; Session altered. SQL> SELECT SYSDATE FROM dual; SYSDATE ------------------- Today is 10/09/2001
Преобразование типов
Преобразование символьной строки к типу DATE выполняется функцией TO_DATE. Эта функция возвращает значение даты и времени и может иметь от одного до трех параметров:
Арифметика даты и времени
Данные типа DATE могут быть операндами операций увеличения, уменьшения и вычитания.
В операциях увеличения и уменьшения тип первого операнда - DATE, тип второго операнда - NUMBER. Тип результата совпадает с типом первого операнда.
В операции вычитания оба операнда должны иметь тип DATE, результат имеет тип NUMBER.
Число типа NUMBER в арифметике даты и времени интерпретируется как количество дней. Дробная часть числа - дробные части дня, т.е., часы, минуты, секунды. Некоторые функции Oracle обеспечивают дополнительную поддержку арифметики даты и времени:
| Каталог | Оглавление | Индекс раздела |