Llamadas a funciones escalares

Las funciones escalares devuelven un valor por cada fila. Por ejemplo, la función escalar de valor absoluto toma una columna numérica como argumento y devuelve el valor absoluto de cada valor de la columna. La secuencia de escape para llamar a una función escalar es

{fnscalar-function}

donde función escalar es una de las funciones enumeradas en el Apéndice E: Funciones escalares. Para obtener más información sobre la secuencia de escape de función escalar, vea Secuencia de escape de función escalar en el apéndice C: Gramática SQL.

Por ejemplo, las siguientes instrucciones SQL crean el mismo conjunto de resultados de nombres de cliente en mayúsculas. La primera instrucción usa la sintaxis de secuencia de escape. La segunda instrucción usa la sintaxis nativa para Entrada para OS/2 y no es interoperable.

SELECT {fn UCASE(Name)} FROM Customers  
  
SELECT uppercase(Name) FROM Customers  

Una aplicación puede mezclar llamadas a funciones escalares que usan sintaxis nativa y llamadas a funciones escalares que usan sintaxis ODBC. Por ejemplo, suponga que los nombres de la tabla Empleado se almacenan como apellidos, una coma y un nombre. La siguiente instrucción SQL crea un conjunto de apellidos de empleados en la tabla Empleado. La instrucción usa la función escalar ODBC SUBSTRING y la función escalar de SQL Server CHARINDEX y solo se ejecutará correctamente en SQL Server.

SELECT {fn SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1)} FROM Customers  

Para obtener la interoperabilidad máxima, las aplicaciones deben usar la función escalar CONVERT para asegurarse de que la salida de una función escalar es el tipo necesario. La función CONVERT convierte los datos de un tipo de datos SQL al tipo de datos SQL especificado. La sintaxis de la función CONVERT es

CONVERT(value_exp,data_type)

donde value_exp es un nombre de columna, el resultado de otra función escalar o un valor literal, y data_type es una palabra clave que coincide con el nombre de #define que usa un identificador de tipo de datos SQL tal como se define en el Apéndice D: Tipos de datos. Por ejemplo, la siguiente instrucción SQL usa la función CONVERT para asegurarse de que la salida de la función CURDATE es una fecha, en lugar de una marca de tiempo o datos de caracteres:

INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)  
   VALUES (?, ?, {fn CONVERT({fn CURDATE()}, SQL_DATE)}, ?, ?)  

Para determinar qué funciones escalares son compatibles con un origen de datos, una aplicación llama a SQLGetInfo con las opciones SQL_CONVERT_FUNCTIONS, SQL_NUMERIC_FUNCTIONS, SQL_STRING_FUNCTIONS, SQL_SYSTEM_FUNCTIONS y SQL_TIMEDATE_FUNCTIONS. Para determinar qué operaciones de conversión son compatibles con la función CONVERT, una aplicación llama a SQLGetInfo con cualquiera de las opciones que comienzan por SQL_CONVERT.