Инструменты пользователя

Инструменты сайта


extract

EXTRACT

Версии сервера

0.9 1.0 1.5.3 1.5.4 1.5.5 2.0 2.0.3 2.0.4 2.1 2.5 3.0
Да Да Да Да Да Да Да Да Да Да ?

Формат

EXTRACT (part FROM value)

где

value должно быть следующего типа : DATE, TIME, TIMESTAMP.

Описание

Встроенная функция. Позволяет извлекать дату и время. Извлекаемая часть должна присутствовать в значении. Например, не стоит извлекать год из данных, где хранится время.

EXTRACT (YEAR FROM aTime)

выдаст ошибку.

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

Служебное слово Тип данных Значение
YEAR SMALLINT Год, 1-9999
MONTH SMALLINT Месяц, 1-12
DAY SMALLINT День, 1-31
HOUR SMALLINT Час, 0-23
MINUTE SMALLINT Минут, 0-59
SECOND NUMERIC(9,4) Секунд, 0.0000-59.9999
MILLISECOND NUMERIC(9,1) Миллисекунд, 0.0–999.9 (начиная с версии 2.1.2)
WEEK SMALLINT Номер недели года, 1–53 (начиная с версии 2.1)
WEEKDAY SMALLINT День недели, 0-6 (начиная с Воскресенья)
YEARDAY SMALLINT День года, 0-365

Пример

процедура, возвращающая дату и время в текстовом виде в формате '00.00.0000 00:00'

CREATE OR ALTER PROCEDURE BDATE_TIME(
    DT TIMESTAMP)
RETURNS (
    RESULT VARCHAR(16))
AS
BEGIN
  --извлекаем день 
  SELECT l.result||'.' FROM lpad(EXTRACT(DAY FROM :dt),2,'0') l INTO RESULT;
 
  --извлекаем месяц
  SELECT :RESULT||l.result||'.' FROM lpad(EXTRACT(MONTH FROM :dt),2,'0') l INTO RESULT;
 
  --извлекаем год 
  SELECT :RESULT||l.result||' ' FROM lpad(EXTRACT(YEAR FROM :dt),4,'0') l INTO RESULT;
 
  --извлекаем час 
  SELECT :RESULT||l.result||':' FROM lpad(EXTRACT(HOUR FROM :dt),2,'0') l INTO RESULT;
 
  --извлекаем минута 
  SELECT :RESULT||l.result FROM lpad(EXTRACT(MINUTE FROM :dt),2,'0') l INTO RESULT;
 
  --result = '00.00.0000 00:00';
 
  suspend;
 
END

два варианта получания номера квартала из даты

SELECT CAST(EXTRACT(MONTH FROM CURRENT_TIMESTAMP)/3 + 0.3 AS INTEGER) FROM RDB$DATABASE
SELECT (EXTRACT(MONTH FROM CURRENT_TIMESTAMP)-1)/3+1 FROM RDB$DATABASE

Получение номера недели в году, источник Date functions

CREATE PROCEDURE YearWeek (D DATE)
  RETURNS (WEEK_NO INTEGER) AS
BEGIN
  D = D - EXTRACT(WEEKDAY FROM D-1) + 3;  /* move to thursday */
  WEEK_NO = (EXTRACT(YEARDAY FROM D) - EXTRACT(WEEKDAY FROM D-1) + 7) / 7e0;
  SUSPEND;
END

См. также

Источник

ib60releasenotes.pdf

extract.txt · Последнее изменение: 2025/02/11 04:17 — attid