Вызовы скалярных функций
Скалярные функции возвращают значение для каждой строки. Например, абсолютная скалярная функция принимает числовые столбцы в качестве аргумента и возвращает абсолютное значение каждого значения в столбце. Escape-последовательность вызова скалярной функции
{fn скалярная функция }
где скалярная функция является одной из функций, перечисленных в приложении E: Скалярные функции. Дополнительные сведения о escape-последовательности скалярной функции см. в статье "Скалярная функция escape-последовательность " в приложении C: грамматика SQL.
Например, следующие инструкции SQL создают тот же результирующий набор имен клиентов верхнего регистра. Первый оператор использует синтаксис escape-последовательности. Вторая инструкция использует собственный синтаксис для входящего трафика для ОС/2 и не совместим.
SELECT {fn UCASE(Name)} FROM Customers
SELECT uppercase(Name) FROM Customers
Приложение может смешивать вызовы скалярных функций, использующих собственный синтаксис и вызовы скалярных функций, использующих синтаксис ODBC. Например, предположим, что имена в таблице Employee хранятся в виде фамилии, запятой и имени. Следующая инструкция SQL создает результирующий набор фамилий сотрудников в таблице Employee. Инструкция использует скалярную функцию ODBC SUBSTRING и скалярную функцию SQL Server CHARINDEX и будет правильно выполняться только в SQL Server.
SELECT {fn SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1)} FROM Customers
Для максимальной совместимости приложения должны использовать скалярную функцию CONVERT , чтобы убедиться, что выходные данные скалярной функции являются обязательным типом. Функция CONVERT преобразует данные из одного типа данных SQL в указанный тип данных SQL. Синтаксис функции CONVERT :
CONVERT( value_exp , data_type)
где value_exp является именем столбца, результатом другой скалярной функции или литеральным значением, а data_type — ключевое слово, соответствующее имени #define, которое используется идентификатором типа данных SQL, как определено в приложении D: Типы данных. Например, следующая инструкция SQL использует функцию CONVERT , чтобы убедиться, что выходные данные функции CURDATE являются датой, а не метками времени или символьными данными:
INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)
VALUES (?, ?, {fn CONVERT({fn CURDATE()}, SQL_DATE)}, ?, ?)
Чтобы определить, какие скалярные функции поддерживаются источником данных, приложение вызывает SQLGetInfo с параметрами SQL_CONVERT_FUNCTIONS, SQL_NUMERIC_FUNCTIONS, SQL_STRING_FUNCTIONS, SQL_SYSTEM_FUNCTIONS и SQL_TIMEDATE_FUNCTIONS. Чтобы определить, какие операции преобразования поддерживаются функцией CONVERT , приложение вызывает SQLGetInfo с любыми параметрами, начинающимися с SQL_CONVERT.