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 (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
См. также
Математические операции с датой и временем, ADDMILLISECOND(), ADDSECOND(), ADDMINUTE(), ADDDAY(), ADDWEEK(), ADDMONTH(), ADDYEAR()
Источник
ib60releasenotes.pdf
extract.txt · Последнее изменение: 2013/09/28 00:00 (внешнее изменение)
Обсуждение
Было бы не плохо указать код процедуры lpad :/
В списке служебных слов не достаёт millisecond: select extract(millisecond from current_timestamp) from rdb$database T
поправьте: Час, 1-23 на Час, 0-23 с минутами то же самое