Выделение заданных элементов даты (DATESPLIT/EXTRACT)

Функция

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

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

Варианты:

  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|