Дата публикации: 04.12.2007
Обновлено: 19.08.2015

Справочник по управляющим последовательностям ODBC для Firebird и InterBase (ODBC Escape Sequences).


Что такое управляющие последовательности (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_BIT, 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.
  • Тип SQL_BIT поддерживается, начиная с Firebird 3.0/InterBase 7.0.

Назначение функций и примеры их использования.

Строковые функции

Функция Описание Примеры
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 DAYNAME({d ‘2007-04-01’})} = ‘WEEKDAY_1’

first_week_day = 7
{fn DAYNAME({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’})} = 4
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_BIT,
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’

Полезные ссылки

  1. Скачать Firebird
  2. ODBC Firebird driver, ODBC InterBase или OLE DB?
  3. Olivier Bridgeman ODBC Escape Sequences [eng]
  4. IBProvider. Пример вызова хранимых процедур в ODBC стиле в статье MS SQL Linked Server. Как подключить Firebird/InterBase к SQL Server
  5. IBProvider. Пример вызова хранимой процедуры в ODBC стиле (IN, OUT параметры) (С++, VB)
  6. IBProvider. Пример вызова хранимой процедуры в ODBC стиле (Получение rowset) (С++, VB)
  7. Статья в MSDN ODBC Escape Sequences [eng]
  8. Статья в MSDN Escape Sequences in ODBC [eng]
  9. Подключение к Firebird/InterBase в Visual Studio .Net (примеры на c#
  10. Новые возможности Firebird 2.1 в ADO.Net (c#).
  11. Новые возможности Firebird 2.0 в ADO.Net (c#).

Дата публикации: 04.12.2007. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.