[All]
Справочник по управляющим последовательностям ODBC для Interbase (ODBC Escape Sequences)
Von: Andrew Merkulov
Inhaltsangabe: Управляющие ODBC последовательности – это расширение для языка SQL из технологии ODBC, которое было разработано корпорацией Microsoft для решения проблем переносимости SQL запросов между различными СУБД.
Справочник по управляющим последовательностям ODBC для Firebird и Interbase (ODBC Escape Sequences)
Справочник по управляющим последовательностям ODBC для Firebird и Interbase (ODBC Escape Sequences)
Авторы: Пиминов Роман, Меркулов Андрей IBProvider Team
Опубликовано: 04.12.2007
Что такое управляющие последовательности (ODBC Escape Sequences)?
Управляющие последовательности (Escape Sequences) входят в стандарт ODBC и предназначены для решения проблем совместимости SQL для различных серверов баз данных.
В отличие от MS SQL Server, в Firebird и Interbase нет встроенной поддержки управляющих последовательностей, поэтому мы решили добавить их в IBProvider, чтобы дать возможность пользователям этих серверов писать SQL запросы, легко переносимые между различными серверами баз данных. Изначально последовательности были реализованы в ODBC драйверах, но впоследствии они перекочевали в OLE DB и были добавлены в Microsoft OLE DB Provider для SQL Server, в IBProvider и во многие другие OLE DB драйвера, которые постепенно вытеснили узкоспециализированную ODBC технологию более универсальной - OLE DB.
ПРИМЕЧАНИЕ
Управляющие последовательности заключаются в фигурные скобки {escape sequence}.
|
Для включения ODBC парсера в IBProvider в строку подключения необходимо добавить параметр support_odbc_query = true.
Зачем использовать ODBC Escape Sequences?
Некоторые возможности SQL, такие как вызов скалярных функций или хранимых процедур, часто в различных серверах баз данных реализованы различными способами. Для решения проблемы совместимости SQL в рамках стандарта ODBC были разработаны управляющие последовательности (ODBC Escape Sequences).
Для первого примера возьмем операцию сложения строк. В Firebird и Oracle конкатенация строк реализована при помощи операции ||, а в MS SQL Server при помощи операции +. Для того, чтобы ваш запрос был совместим с различными серверами, его необходимо привести к стандартному виду.
Конкатенация в MS SQL:
SELECT (first_name + ' ' + last_name) as name FROM employee
|
Конкатенация в Firebird и Oracle:
SELECT (first_name || ' ' || last_name) FROM employee
|
Запрос, записанный с применением управляющих последовательностей, будет работать в любых серверах с поддержкой ODBC Escape Sequences:
SELECT {fn concat (first_name, {fn concat (' ', last_name)})} FROM employee
|
В качестве еще одного примера подойдет реализация функций работы с датой и временем. Могут различаться дни, которые принимаются в качестве начала недели, реализации подсчета номера недели при переходе через год (функция WEEK), а так же многие другие параметры, которые при отсутствии стандартного подхода могут привести к неправильной работе приложения при смене сервера баз данных.
Не стоит думать, что такие задачи как работа с датой и временем, вызов скалярных функций отличаются только для серверов баз данных различных производителей (Oracle, Firebird, MS SQL). В рамках одного сервера могут так же наблюдаться различия между несколькими версиями. Но использование управляющих последовательностей ODBC должно защитить вас от несоответствий. Собственно для этого и был разработан этот стандарт.
В IBProvider три задачи приведены к стандартному синтаксису ODBC Escape Sequences:
- определение даты и времени;
- вызов хранимых процедур;
- вызов встроенных функций;
Где используются ODBC Escape Sequences?
- В MS SQL Server Management Studio для написания унифицированных запросов к связным серверам (Linked Server).
- В MS SQL Server Analysis Services при выполнении различных математических расчетов, а так же получении срезов по различным временным интервалам.
- В Crystal Reports и Reporting Services (SSRS) для разработки отчетов, не зависящих от сервера баз данных.
- В приложениях, которые должны быть независимы от особенностей реализации SQL в различных серверах баз данных.
Последовательности определения даты и времени (Date, Time, Timestamp Escape Sequences).
| Название последовательности |
Синтаксис |
| Дата |
{d 'yyyy-mm-dd'} |
| Время |
{t 'hh:mm:ss'} |
| Временная метка (Timestamp) |
{ts 'yyyy-mm-dd hh:mm:ss'} |
Пример обработки строки с датой через управляющую последовательность:
SELECT COUNT(id) AS cnt
FROM employee
WHERE hire_date > {d '2007-01-01'}
|
ПРИМЕЧАНИЕ
В примере строка с датой записана в стандартном формате управляющей последовательности {d ‘yyyy-mm-dd'}, а далее она уже приводится к тому формату, в котором хранятся даты на конкретном сервере баз данных.
|
Последовательность для вызова хранимой процедуры (Procedure Call Escape Sequence).
Хранимые процедуры так же могут быть вызваны различными способами:
select * from sp_name
exec sp_name(params)
execute sp_name(params)
|
Синтаксис вызова процедуры в ODBC стиле:
{[?=]call procedure-name[([parameter][,[parameter]]...)]}
|
Пример вызова хранимой процедуры в ODBC стиле в которой определяются 1 входной и 4 выходных именованных параметра:
{call SUB_TOT_BUDGET(:dept_head, :tot_b output, :avg_b output, :min_b output, :max_b output)};
|
Последовательность для вызова скалярных функций (Scalar Function Escape Sequence)
Синтаксис вызова скалярной функции:
SELECT {fn function(скалярные выражения, поля запроса)} FROM EMP
|
Пример приведения строки к верхнему регистру с использованием управляющей последовательности {fn .. }:
SELECT {fn UCASE(NAME)} FROM EMP
|
Какие функции поддерживаются моим сервером баз данных?
На момент написания статьи в IBProvider был реализована поддержка 69 ODBC функций для различных серверов.
Строковые функции
| Название функции |
IB 4 |
IB 5 |
IB 6 |
IB 6.5 |
IB 7 |
IB 7.1 |
IB 7.5 |
IB 2007 |
FB 1 |
FB 1.5 |
FB 2 |
FB 2.1 |
YA |
| ASCII |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| BIT_LENGTH |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
|
| CHAR |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| CHAR_LENGTH |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
+ |
| CHARACTER_LENGTH |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
+ |
| CONCAT |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| DIFFERENCE |
|
|
|
|
|
|
|
|
|
|
|
|
|
| INSERT |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| LCASE |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
+ |
| LEFT |
|
|
|
|
|
|
|
|
+ |
+ |
+ |
+ |
+ |
| LENGTH |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
+ |
| LOCATE |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| LTRIM |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
+ |
| OCTET_LENGTH |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
|
| POSITION |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| REPEAT |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| REPLACE |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| RIGHT |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
+ |
| RTRIM |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
+ |
| SOUNDEX |
|
|
|
|
|
|
|
|
|
|
|
|
|
| SPACE |
|
|
|
|
|
|
|
|
|
|
+ |
+ |
+ |
| SUBSTRING |
|
|
|
|
|
|
|
|
+ |
+ |
+ |
+ |
+ |
| UCASE |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
Числовые функции
| Название функции |
IB 4 |
IB 5 |
IB 6 |
IB 6.5 |
IB 7 |
IB 7.1 |
IB 7.5 |
IB 2007 |
FB 1 |
FB 1.5 |
FB 2 |
FB 2.1 |
YA |
| ABS |
|
|
|
|
|
|
+ |
+ |
|
+ |
+ |
+ |
+ |
| ACOS |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| ASIN |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| ATAN |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| ATAN2 |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| CEILING |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| COS |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| COT |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| DEGREES |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| EXP |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| FLOOR |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| LOG |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| LOG10 |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| MOD |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| PI |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| POWER |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| RADIANS |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| RAND |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| ROUND |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| SIGN |
|
|
|
|
|
|
+ |
+ |
|
+ |
+ |
+ |
+ |
| SIN |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| SQRT |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| TAN |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| TRUNCATE |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
Функции даты и времени
| Название функции |
IB 4 |
IB 5 |
IB 6 |
IB 6.5 |
IB 7 |
IB 7.1 |
IB 7.5 |
IB 2007 |
FB 1 |
FB 1.5 |
FB 2 |
FB 2.1 |
YA |
| CURRENT_DATE |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| CURRENT_TIME[см ниже] |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| CURRENT_TIMESTAMP |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| CURDATE |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| CURTIME |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| DAYNAME |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| DAYOFMONTH |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| DAYOFWEEK |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| DAYOFYEAR |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| EXTRACT |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| HOUR |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| MINUTE |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| MONTH |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| MONTHNAME |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| NOW |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| QUARTER |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| SECOND |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| TIMESTAMPADD |
|
|
|
|
|
|
|
|
|
|
|
+ |
+ |
| TIMESTAMPDIFF[см ниже] |
|
|
|
|
|
|
|
|
|
|
|
+ |
|
| WEEK |
|
|
|
|
|
|
|
|
|
|
|
+ |
|
| YEAR |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
ПРИМЕЧАНИЕ
Функция CURRENT_TIME доступна только для 2-го и 3-го диалектов.
Для функции TIMESTAMPDIFF не поддерживаются значения интервала SQL_TSI_WEEK, SQL_TSI_QUARTER.
|
Системные функции
| Название функции |
IB 4 |
IB 5 |
IB 6 |
IB 6.5 |
IB 7 |
IB 7.1 |
IB 7.5 |
IB 2007 |
FB 1 |
FB 1.5 |
FB 2 |
FB 2.1 |
YA |
| DATABASE |
|
|
|
|
|
|
|
|
|
|
|
|
|
| IFNULL |
|
|
|
|
|
|
+ |
+ |
|
+ |
+ |
+ |
+ |
| USER |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
Функции преобразования типов данных
| Название функции |
IB 4 |
IB 5 |
IB 6 |
IB 6.5 |
IB 7 |
IB 7.1 |
IB 7.5 |
IB 2007 |
FB 1 |
FB 1.5 |
FB 2 |
FB 2.1 |
YA |
| CONVERT |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
ПРИМЕЧАНИЕ
Функция CONVERT поддерживает следующие типы данных: SQL_BIGINT, SQL_CHAR, SQL_DECIMAL, SQL_DOUBLE, SQL_FLOAT, SQL_INTEGER, SQL_LONGVARCHAR, SQL_NUMERIC, SQL_REAL, SQL_SMALLINT, SQL_DATE, SQL_TIME, SQL_TIMESTAMP, SQL_VARCHAR
Типы SQL_BIGINT и SQL_TIME поддерживаются только во 2 и 3 диалекте.
Тип SQL_LONGVARCHAR поддерживается, начиная с Firebird 2.1.
|
Назначение функций и примеры их использования.
Строковые функции
| Функция |
Описание |
Примеры |
| ASCII (string_exp) |
Возвращает ASCII-код первого символа слева строкового выражения. |
{fn ASCII('A')} = 65 {fn ASCII('BCD')} = 66 |
| BIT_LENGTH (string_exp) |
Возвращает длину в битах для строкового выражения. |
{fn BIT_LENGTH('hello')} = 40 {fn BIT_LENGTH('hello')} = 80 - для Unicode |
| CHAR (code) |
Возвращает символ по его ASCII-коду. |
{fn CHAR(65)} = 'A' |
| CHAR_LENGTH (string_exp) |
Возвращает длину в символах строкового выражения. Эквивалентна функции CHARACTER_LENGTH. |
{fn CHAR_LENGTH('hello')} = 5 |
| CHARACTER_LENGTH(string_exp) |
Возвращает длину в символах строкового выражения. Эквивалентна функции CHAR_LENGTH. |
{fn CHARACTER_LENGTH ('hello')} = 5 |
| CONCAT (string_exp1, string_exp2) |
Возвращает результат объединения двух строковых выражений. |
{fn CONCAT('Hel', 'lo')} = 'Hello' |
| INSERT (string_exp1, start, length, string_exp2) |
Возвращает строковое выражение, где в строке string_exp1, начиная с символа start, length символов заменены строкой string_exp2. |
{fn INSERT('1.23.2',3,2,'8')} = '1.8.2' |
| LCASE (string_exp) |
Возвращает строковое выражение, приведенное к нижнему регистру. |
{fn LCASE('HELLO')} = ' hello' |
| LEFT (string_exp, count) |
Возвращает левую часть строкового выражения. |
{fn LEFT(' hello', 4)} = ' hell' |
| LENGTH (string_exp) |
Возвращает длину строки в символах без оконечных пробелов. |
{fn LENGTH(' hello ')} = 5 |
| LOCATE (string_exp1, string_exp2[, start]) |
Возвращает позицию первого вхождения string_exp1 в string_exp2. Если аргумент start не указан, то поиск идет с первого символа. Если строка не найдена, то функция возвращает 0. |
{fn LOCATE('ll', 'hello')} = 3 {fn LOCATE('la', 'hello')} = 0 {fn LOCATE('lo', 'hello', 3)} = 4 {fn LOCATE('ll', 'hello', 4)} = 0
|
| LTRIM (string_exp) |
Удаляет пробелы с начала строки. |
{fn LTRIM (' hello ')} = 'hello ' |
| OCTET_LENGTH (string_exp) |
Возвращает длину строки в байтах. |
{fn OCTET_LENGTH('hello')} = 5 |
| POSITION (string_exp1 IN string_exp2) |
Возвращает позицию первого вхождения string_exp1 в string_exp2. Если строка не найдена, то функция возвращает 0. |
{fn POSITION('ll' IN 'hello')} = 3 {fn POSITION('la' IN 'hello')} = 0 |
| RIGHT (string_exp, count) |
Возвращает count символов с конца строки. |
{fn RIGHT('hello', 2)} = 'lo' |
| RTRIM (string_exp) |
Удаляет пробелы с конца строки. |
{fn RTRIM (' hello ')} = ' hello' |
| SPACE (count) |
Возвращает строку, состоящую из count пробелов. |
{fn SPACE(5)} = ' ' |
| SUBSTRING (string_exp, start, length) |
Возвращает часть строки string_exp, начиная с позиции start длиной length. |
{fn SUBSTRING('hello', 2, 3)} = 'ell' |
| UCASE (string_exp) |
Возвращает строку, приведенную к верхнему регистру. |
{fn UCASE ('Hello')} = 'HELLO' |
Числовые функции
| Функция |
Описание |
Примеры |
| ABS (numeric_exp) |
Возвращает абсолютную величину аргумента. |
{fn ABS(-5)} = 5 {fn ABS(5)} = 5 |
| ACOS (float_exp) |
Возвращает арккосинус угла, указанного в радианах. |
{fn ACOS(1)} = 0 |
| ASIN (float_exp) |
Возвращает арккосинус угла, указанного в радианах. |
{fn ASIN(0)} = 1 |
| ATAN (float_exp) |
Возвращает арктангенс угла, указанного в радианах. |
{fn ATAN(0)} = 0 |
| ATAN2 (float_exp1, float_exp2) |
Возвращает арктангенс угла, отсчитываемого от оси 0X до точки (float_exp1, float_exp2) |
{fn ATAN2(0, 1)} = 0 |
| CEILING (numeric_exp) |
Возвращает наименьшее целое, большее или равное аргументу. |
{fn CEILING(5.6)} = 6{fn CEILING(-5.6)} = -5 |
| COS (float_exp) |
Возвращает косинус угла, указанного в радианах. |
{fn COS(0)} = 1 |
| COT (float_exp) |
Возвращает котангенс угла, указанного в радианах. |
{fn COT(1)} = 0.642(…) |
| DEGREES (numeric_exp) |
Преобразует радианы в градусы. |
{fn DEGREES(1)} = 57.295(…) |
| EXP (float_exp) |
Возвращает экспоненту числа. |
{fn EXP(0)} = 1 |
| FLOOR (numeric_exp) |
Возвращает наименьшее целое, меньшее или равное аргументу. |
{fn FLOOR(5.6)} = 5 {fn FLOOR(-5.6)} = -6 |
| LOG (float_exp) |
Возвращает натуральный логарифм числа. |
{fn LOG(1)} = 0 |
| LOG10 (float_exp) |
Возвращает десятичный логарифм числа. |
{fn LOG10(1)} = 0 |
| MOD (integer_exp1, integer_exp2) |
Возвращает результат деления по модулю integer_exp1 на integer_exp2. |
{fn MOD (16, 6)} = 4 |
| PI ( ) |
Возвращает число PI. |
{fn PI()} = 3.1419… |
| POWER (numeric_exp, integer_exp) |
Возвращает результат возведения числа numeric_exp в степень integer_exp. |
{fn POWER(2,3)} = 8 |
| RADIANS (numeric_exp) |
Преобразует градусы в радианы. |
{fn RADIANS(360)} = 6.283… |
| RAND () |
Возвращает случайное число. |
{fn RAND()} = (случайное число в диапазоне [0..1]) |
| ROUND (numeric_exp, integer_exp) |
Возвращает результат округления числа numeric_exp до integer_exp знаков после запятой. Если integer_exp отрицательное, то округление идет до |integer_exp| знаков перед запятой. |
{fn ROUND (2.236, 2)} = 2.24 {fn ROUND (125.15, -1)} = 130 |
| SIGN (numeric_exp) |
Возвращает знак числа. Если numeric_exp больше нуля, то возвращается 1. Если numeric_exp меньше нуля, то возвращается -1. Если numeric_exp равно нулю возвращается 0. |
{fn SIGN(15)} = 1 {fn SIGN(-1.25)} = -1 {fn SIGN(0)} = 0 |
| SIN (float_exp) |
Возвращает синус угла, указанного в радианах. |
{fn SIN(0)} = 0 |
| SQRT (float_exp) |
Возвращает квадратный корень из числа. |
{fn SQRT(9)} = 3 |
| TAN (float_exp) |
Возвращает тангенс угла, указанного в радианах. |
{fn TAN(0)} = 0 |
| TRUNCATE (numeric_exp, integer_exp) |
Возвращает результат отсечения от числа numeric_exp разрядов вплоть до integer_exp знаков после запятой. Если integer_exp отрицательное, то отсечение идет до |integer_exp| знаков перед запятой. |
{fn TRUNCATE (2.236, 2)} = 2.23 {fn TRUNCATE (125.15, -1)} = 120 |
Функции даты и времени
| Функция |
Описание |
Примеры |
| CURRENT_DATE () |
Возвращает текущую дату. |
{fn CURRENT_DATE()} |
| CURRENT_TIME |
Возвращает текущее время. |
{fn CURRENT_TIME} |
| CURRENT_TIMESTAMP |
Возвращает текущую временную метку. |
{fn CURRENT_TIMESTAMP} |
| CURDATE () |
Возвращает текущую дату. |
{fn CURDATE()} |
| CURTIME () |
Возвращает текущее время. |
{fn CURTIME()} |
| DAYNAME (date_exp) |
Возвращает строку с названием дня недели.
first_week_day – параметр устанавливается в строке подключения или в параметрах команды (в ADO). По умолчанию он равен 1 (Понедельник).
Для версий Interbase >= 7.5, Firebird >= 1.5 и Yaffil возвращаются названия дней недели Monday, Tuesday, Wednesday, и т.д. Для более старых версий: WEEKDAY_1 - для понедельника WEEKDAY_2 - вторник WEEKDAY_3 - среда и т.д. |
Для версий Interbase >= 7.5, Firebird >= 1.5, Yaffil: {fn DAYNAME({d '2007-10-01'})} = 'Monday'
Для более старых версий: first_week_day = 1 [default] {fn MONTHNAME({d '2007-04-01'})} = 'WEEKDAY_1'
first_week_day = 7 {fn MONTHNAME({d '2007-04-01'})} = 'WEEKDAY_2' |
| DAYOFMONTH (date_exp) |
Возвращает номер дня месяца как целое значение в диапазоне от 1 до 31. |
{fn DAYOFMONTH({d '2007-01-25'})} = 25 |
| DAYOFWEEK (date_exp) |
Возвращает номер дня недели, как целое значение в диапазоне от 1 до 7. Возвращаемое значение зависит от свойства инициализации first_week_day.Описание параметра first_week_day см. в DAYNAME |
Если first_week_day = 1 [default] {fn DAYOFWEEK({d '2007-01-07'})} = 7
Если first_week_day = 7 {fn DAYOFWEEK({d '2007-01-07'})} = 1 |
| DAYOFYEAR (date_exp) |
Возвращает номер дня года как целое значение в диапазоне от 1 до 366. |
{fn DAYOFYEAR({d '2007-01-02'})} = 2 {fn DAYOFYEAR({d '2007-12-31'})} = 365 |
| EXTRACT (extract-field FROM extract-source) |
Возвращает часть даты, определенную аргументом extract-field. Возможны следующие значения extract-field:
YEAR MONTH DAY HOUR MINUTE SECOND |
{fn EXTRACT(YEAR FROM {d '2000-01-01'})} = 2000 {fn EXTRACT(MONTH FROM {d '2000-05-01'})} = 5 {fn EXTRACT(DAY FROM {d '2007-08-28'})} = 28 {fn EXTRACT(HOUR FROM {ts '2008-08-05 02:02:03'})} = 2 {fn EXTRACT(MINUTE FROM {t '02:10:03'})} = 10 {fn EXTRACT(SECOND FROM {t '01:02:00.589'})} = 0.589
|
| HOUR (time_exp) |
Извлекает часы из time_exp, как целое значение в диапазоне от 0 до 23. |
{fn HOUR({ts '2008-05-08 02:02:03'})} = 2 |
| MINUTE (time_exp) |
Извлекает минуты из time_exp как целое значение в диапазоне от 0 до 59. |
{fn MINUTE({t '11:59:03'})} = 59 |
| MONTH (date_exp) |
Извлекает месяц из date_exp как целое число в диапазоне от 1 до 12. |
{fn MONTH({d '2000-04-01'})} = 12 |
| MONTHNAME (date_exp) |
Возвращает строку, содержащую название месяца. |
Для версий Interbase >= 7.5, Firebird >= 1.5, Yaffil: {fn MONTHNAME({d '2007-04-01'})} = 'April'
Для более старых версий: {fn MONTHNAME({d '2007-04-01'})} = 'MONTH_4' |
| NOW () |
Возвращает текущую дату и время. |
{fn NOW()} |
| QUARTER (date_exp) |
Возвращает номер квартала как целое значение в диапазоне от 1 до 4, где 1 возвращается, если дата находится между 1 января и 31 марта включительно. |
{fn QUARTER({d '2007-04-01'})} = 2 |
| SECOND (time_exp) |
Извлекает секунды из time_exp, как целое значение в диапазоне от 0 до 59. |
{fn SECOND({t '11:00:59'})} = 59 |
| TIMESTAMPADD (interval, integer_exp, timestamp_exp) |
Возвращает временную метку, полученную путем добавления к timestamp_exp значения integer_exp для интервала interval. interval может принимать следующие значения:
SQL_TSI_FRAC_SECOND SQL_TSI_SECOND SQL_TSI_MINUTE SQL_TSI_HOUR SQL_TSI_DAY SQL_TSI_WEEK SQL_TSI_MONTH SQL_TSI_QUARTER SQL_TSI_YEAR
где доли секунды представлены миллиардными секунды. |
{fn TIMESTAMPADD(SQL_TSI_QUARTER, 2, {d '1998-05-02'})} = '1998-11-02' {fn TIMESTAMPADD(SQL_TSI_DAY, -10, {d '2004-03-04'})} = '2004-02-23' {fn TIMESTAMPADD(SQL_TSI_MONTH, 23, {d '1998-05-01'})} = '2000-04-01' {fn TIMESTAMPADD(SQL_TSI_WEEK, 2, {ts '2007-10-18 01:02:03'})} = '2007-11-01 01:02:03' {fn TIMESTAMPADD(SQL_TSI_DAY, -10, {d '2004-03-04'})} = '2004-02-23' {fn TIMESTAMPADD(SQL_TSI_HOUR, 23, {ts '1998-05-01 01:02:03'})} = '1998-05-02 00:02:03' {fn TIMESTAMPADD(SQL_TSI_MINUTE, -63, {t '01:02:03'})} = '23:59:03' {fn TIMESTAMPADD(SQL_TSI_SECOND, -63, {t '01:02:03'})} = '01:01:00' {fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, 51000000, {t '01:02:03'})} = 01:02:03.0510'
|
| TIMESTAMPDIFF (interval, timestamp_exp1, timestamp_exp2) |
Возвращает разницу в interval, на которую timestamp_exp2 больше чем timestamp_exp1, выраженную целым числом. interval может принимать следующие значения:
SQL_TSI_FRAC_SECOND SQL_TSI_SECOND SQL_TSI_MINUTE SQL_TSI_HOUR SQL_TSI_DAY SQL_TSI_MONTH SQL_TSI_YEAR
SQL_TSI_FRAC_SECOND - доли секунды представлены 1 миллиардной секунды. |
{fn TIMESTAMPDIFF(SQL_TSI_YEAR, {ts '1998-12-29 01:02:03'}, {ts '2003-01-01 01:02:03'})} = 5 {fn TIMESTAMPDIFF(SQL_TSI_MONTH, {d '2007-01-30'}, {d '2007-01-31'})} = 0 {fn TIMESTAMPDIFF(SQL_TSI_DAY, {d '2000-03-04'}, {d '2000-02-22'})} = 11 {fn TIMESTAMPDIFF(SQL_TSI_HOUR, {ts '1998-05-01 01:02:03'}, {ts '1998-05-02 00:02:03'})} = 23 {fn TIMESTAMPDIFF(SQL_TSI_MINUTE, {t '01:59:03'}, {t '01:02:05'})} = -57 {fn TIMESTAMPDIFF(SQL_TSI_SECOND, {t '01:02:03'}, {t '01:01:00'})} = -63 {fn TIMESTAMPDIFF(SQL_TSI_FRAC_SECOND, {t '01:02:03.051'}, {t '01:02:03.010'})} = -41000000 |
| WEEK (date_exp) |
Извлекает номер недели из date_exp, как целое число в диапазоне от 1 до 53. |
{fn WEEK({d '2007-01-01'})} = 0 {fn WEEK({d '2006-01-01'})} = 52 |
| YEAR (date_exp) |
Извлекает год из date_exp. |
{fn YEAR({d '1982-06-19'})} = 1982 |
Системные функции
| Функция |
Описание |
Примеры |
| IFNULL (exp, value) |
Если exp является null, тогда функция возвращает value. Если exp не является null, тогда функция возвращает exp. Тип данных value должен быть совместим с типом данных exp. |
{fn IFNULL(NULL, 'Hello') = 'Hello' {fn IFNULL('Test', 'Hello') = 'Test' |
| USER () |
Возвращает имя текущего пользователя. |
{fn USER()} |
Функции преобразования типов данных
| Функция |
Описание |
Примеры |
| CONVERT (value_exp, data_type) |
Возвращает значение value_exp, приведенное к типу data_type. data_type может принимать следующие значения: SQL_BIGINT, SQL_CHAR, SQL_DECIMAL, SQL_DOUBLE, SQL_FLOAT, SQL_INTEGER, SQL_LONGVARCHAR, SQL_NUMERIC, SQL_REAL, SQL_SMALLINT, SQL_DATE, SQL_TIME, SQL_TIMESTAMP, SQL_VARCHAR.
Для некоторых типов опционально могут быть указаны дополнительные параметры: SQL_CHAR(size), SQL_DECIMAL(scale, precision), SQL_NUMERIC(scale, precision), SQL_VARCHAR(size).
|
{fn CONVERT(195, SQL_CHAR)} = '195' {fn CONVERT(195, SQL_DECIMAL(5,0))} = 195 {fn CONVERT('15.81', SQL_FLOAT)} = 15.81 {fn CONVERT('01.02.2007', SQL_DATE)} = 01.02.2007 {fn CONVERT(195, SQL_VARCHAR(10))} = '195'
|
Полезные ссылки
|
|
Connect with Us