Выделение заданных элементов даты

Функция

Выделение заданных элементов даты.

Спецификация

Варианты:

  1. <элемент даты>::=
    {YEAR | MONTH | DAY | HOUR | MINUTE | SECOND}
Синтаксические правила
  1. <Дата-время выражение> должно быть представлено в одном из форматов по умолчанию.

  2. <Дата-время выражение> может быть представлено в виде литерала типа <дата-время>.

  3. <Параметр> определяет возвращаемое функцией значение.

    Допустимы следующие значения <параметра>:

    Значение параметраВозвращаемое значение
    'D'День месяца
    'M'Номер месяца
    'QY'Номер квартала
    'Y'Год
    'DW'Номер дня недели
    'DY'Номер дня в году
    'WM'Номер недели в месяце
    'WY'Номер недели в году
    'ND'Номер дня от начала нашей эры
    'NW'Номер недели от начала нашей эры
    'NM'Номер месяца от начала нашей эры
    'HH'Количество часов (диапазон 00-23)
    'HH12'Количество часов (диапазон 0-12)
    'HH24'Количество часов (диапазон 00-23)
    'MI'Количество минут
    'SS'Количество секунд
    'FF'Количество тиков
  4. Функция EXTRACT добавлена для совместимости со стандартом SQL2008.

  5. <Элемент даты> определяет возвращаемое функцией значение:

    • YEAR – год;

    • MONTH – месяц;

    • DAY – день;

    • HOUR – час;

    • MINUTE – минуты;

    • SECOND – секунды.

  6. Аргументы <дата-время выражение> и <параметр> могут быть заданы <SQL-параметром>, который должен содержать спецификацию типа данных параметра.

    select datesplit(? (date), ? (char(2)));
    01.01.2013
    qy
    |          1|
    
    select extract(hour from ? (date));
    01.01.2013:12:45
    |                   12|

Возвращаемое значение

Функция DATESPLIT:

  1. Указанный элемент <значимого выражения типа DATE>.

  2. Тип возвращаемого значения – INT.

Функция EXTRACT:

  1. Значение DECIMAL со SCALE=0 для всех элементов даты, кроме SECOND.

  2. Значение DECIMAL со SCALE=2 для элемента даты SECOND.

Примеры
select avg(datesplit(sysdate,'Y') -datesplit('28.04.1950','Y')) from person;

Определить, сколько длилась Великая Отечественная война:

select distinct 'Великая Отечественная война продолжалась '||
cast datesplit('09.05.1945','ND')- datesplit('22.06.1941','ND') as char(5) ||' дней';
|Великая Отечественная война продолжалась 1417 дней|

select datesplit (cast '04-11-2006' as date,'qy');
|4|
select sysdate, extract(month from sysdate);
|12.08.2007:12:05:45.23|          8|