КаталогОглавлениеИндекс раздела


Дата и время. Справка

Хотя дата и время могут представляться в виде чисел или символьных строк, они не являются числами или символьными строками, а представляют собой отдельный тип данных. В представлении даты и времени и в работе с этими типами данных две рассматриваемые нами СУБД существенно различаются (DB2 ближе к общепринятым формам, Oracle основывается на собственных оригинальных концепциях), поэтому эти вопросы вынесены в отдельный справочный материал.

Дата и время в DB2

Типы данных

В DB2 для представления даты и времени имеются следующие типы данных

Данные типов дата/время могут увеличиваться, уменьшаться и вычитаться. Эти операции могут иметь результатом десятичные данные, называемые длительностями (duration). Длительности являются числовыми представлениями временных интервалов. Различаются 4 типа длительностей:

Константы даты/времени

Константы даты/времени записываются в виде строковых констант определенного формата.

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 - имеет один аргумент и возвращает внутреннее представление времени. Аргументом функции может быть:

Функция приведения к типу временного штампа - TIMESTAMP - может иметь один или два аргумента и возвращает внутреннее представление временного штампа.

Данные типа даты/времени могут быть приведены к типу CHAR или VARCHAR при помощи функции CHAR. Эта функция может употребляться с одним или с двумя аргументами. В любом случае тип первого аргумента - DATE, TIME или TIMESTAMP, этот аргумент задает преобразуемое значение. Второй (необязательный) аргумент - аббревиатура формата представления даты/времени. Если тип первого аргумента - TIMESTAMP, то второй аргумент задавать нельзя. Функция возвращает строковое представление даты/времени/временного штампа в соответствии с заданным форматом (или с форматом по умолчанию - если второй аргумент не задан).

Некоторые функции, работающие с датой и временем

Арифметика даты/времени

Данные типов дата/время/временной штамп могут быть операндами операций увеличения, уменьшения и вычитания.

В операциях увеличения и уменьшения тип первого операнда - дата/время/временной штамп (или корректное символьное представление), тип второго операнда - именованная длительность или длительность типа, соответствующая первому операнду. Тип результата совпадает с типом первого операнда.

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


Дата и время в Oracle

Типы данных

В 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 в тип CHAR выполняется функцией TO_CHAR. Эта функция символьное представление даты и времени и может иметь от одного до трех параметров:

Арифметика даты и времени

Данные типа DATE могут быть операндами операций увеличения, уменьшения и вычитания.

В операциях увеличения и уменьшения тип первого операнда - DATE, тип второго операнда - NUMBER. Тип результата совпадает с типом первого операнда.

В операции вычитания оба операнда должны иметь тип DATE, результат имеет тип NUMBER.

Число типа NUMBER в арифметике даты и времени интерпретируется как количество дней. Дробная часть числа - дробные части дня, т.е., часы, минуты, секунды. Некоторые функции Oracle обеспечивают дополнительную поддержку арифметики даты и времени:


КаталогОглавлениеИндекс раздела