Chamadas de função escalar
As funções escalares retornam um valor para cada linha. Por exemplo, a função escalar de valor absoluto usa uma coluna numérica como argumento e retorna o valor absoluto de cada valor na coluna. A sequência de escape para chamar uma função escalar é
{fn scalar-function }
em que scalar-function é uma das funções listadas no Apêndice E: funções escalares. Para obter mais informações sobre a sequência de escape da função escalar, consulte Sequência de escape de função escalar no Apêndice C: gramática SQL.
Por exemplo, as instruções SQL a seguir criam o mesmo conjunto de resultados de nomes de clientes em letras maiúsculas. A primeira instrução usa a sintaxe de sequência de escape. A segunda instrução usa a sintaxe nativa do Ingres para OS/2 e não é interoperável.
SELECT {fn UCASE(Name)} FROM Customers
SELECT uppercase(Name) FROM Customers
Um aplicativo pode combinar chamadas para funções escalares que usam sintaxe nativa e chamadas para funções escalares que usam sintaxe ODBC. Por exemplo, suponha que os nomes na tabela Employee sejam armazenados como sobrenome, vírgula e nome. A instrução SQL a seguir cria um conjunto de resultados de sobrenomes de funcionários na tabela Employee. A instrução usa a função escalar ODBC SUBSTRING e a função escalar SQL Server CHARINDEX e será executada corretamente apenas no SQL Server.
SELECT {fn SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1)} FROM Customers
Para máxima interoperabilidade, os aplicativos devem usar a função escalar CONVERT para garantir que a saída de uma função escalar seja do tipo necessário. A função CONVERT converte dados de um tipo de dados SQL para o tipo de dados SQL especificado. A sintaxe da função CONVERT é
CONVERT( value_exp , data_type)
em que value_exp é um nome de coluna, o resultado de outra função escalar ou um valor literal e data_type é uma palavra-chave que corresponde ao nome #define usado por um identificador de tipo de dados SQL, conforme definido no Apêndice D: Tipos de dados. Por exemplo, a instrução SQL a seguir usa a função CONVERT para garantir que a saída da função CURDATE seja uma data, em vez de um carimbo de data/hora ou dados de caracteres:
INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)
VALUES (?, ?, {fn CONVERT({fn CURDATE()}, SQL_DATE)}, ?, ?)
Para determinar quais funções escalares têm suporte em uma fonte de dados, um aplicativo chama SQLGetInfo com as opções SQL_CONVERT_FUNCTIONS, SQL_NUMERIC_FUNCTIONS, SQL_STRING_FUNCTIONS, SQL_SYSTEM_FUNCTIONS e SQL_TIMEDATE_FUNCTIONS Para determinar quais operações de conversão têm suporte na função CONVERT, um aplicativo chama SQLGetInfo com qualquer uma das opções que começam com SQL_CONVERT.