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

Функция

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

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

Варианты:

  1. < синтаксис >::=
    < параметр >::=
  2. < синтаксис >::=
    < элемент даты >::=
    {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|