标量函数调用
标量函数为每一行返回值。 例如,绝对值标量函数以数值列作为参数,并返回列中每个值的绝对值。 用于调用标量函数的转义序列为
{fn scalar-function }
其中 scalar-function 是附录 E:标量函数中列出的函数之一。 有关标量函数转义序列的详细信息,请参阅“附录 C:SQL 语法”中的标量函数转义序列。
例如,以下 SQL 语句将创建相同的大写客户名称结果集。 第一个语句使用转义序列语法。 第二个语句使用适用于 OS/2 的 Ingres 本机语法,并且不可互操作。
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是与附录 D:数据类型中定义的 SQL 数据类型标识符使用的 #define 名称匹配的关键字。 例如,以下 SQL 语句使用 CONVERT 函数来确保 CURDATE 函数的输出是日期,而不是时间戳或字符数据:
INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)
VALUES (?, ?, {fn CONVERT({fn CURDATE()}, SQL_DATE)}, ?, ?)
为了确定数据源支持哪些标量函数,应用程序使用 SQL_CONVERT_FUNCTIONS、SQL_NUMERIC_FUNCTIONS、SQL_STRING_FUNCTIONS、SQL_SYSTEM_FUNCTIONS 和 SQL_TIMEDATE_FUNCTIONS 选项调用 SQLGetInfo。 若要确定 CONVERT 函数支持哪些转换操作,应用程序将使用以 SQL_CONVERT 开头的任何选项调用 SQLGetInfo。