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 é

{fnscalar-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.