Partilhar via


Função de conversão de tipo de dados explícitos

A conversão explícita de tipo de dados é especificada em termos de definições de tipo de dados SQL.

A sintaxe ODBC para a função de conversão de tipo de dados explícito não restringe as conversões. A validade de conversões específicas de um tipo de dados para outro tipo de dados será determinada por cada implementação específica do driver. O driver, à medida que converte a sintaxe ODBC na sintaxe nativa, rejeitará as conversões que, embora legais na sintaxe ODBC, não têm suporte na fonte de dados. A função ODBC SQLGetInfo, com as opções de conversão (como SQL_CONVERT_BIGINT, SQL_CONVERT_BINARY, SQL_CONVERT_INTERVAL_YEAR_MONTH e assim por diante), fornece uma maneira de consultar as conversões com suporte da fonte de dados.

O formato da função CONVERT é:

CONVERT( value_exp, data_type)

A função retorna o valor especificado por value_exp convertido para o data_type especificado, em que data_type é uma das seguintes palavras-chave:

SQL_BIGINT
SQL_BINARY
SQL_BIT
SQL_CHAR
SQL_DATE
SQL_DECIMAL
SQL_DOUBLE
SQL_FLOAT
SQL_GUID
SQL_INTEGER
SQL_INTERVAL_DAY
SQL_INTERVAL_DAY_TO_HOUR

SQL_INTERVAL_DAY_TO_MINUTE
SQL_INTERVAL_DAY_TO_SECOND
SQL_INTERVAL_HOUR
SQL_INTERVAL_HOUR_TO_MINUTE
SQL_INTERVAL_HOUR_TO_SECOND
SQL_INTERVAL_MINUTE
SQL_INTERVAL_MINUTE_TO_SECOND
SQL_INTERVAL_MONTH
SQL_INTERVAL_SECOND
SQL_INTERVAL_YEAR
SQL_INTERVAL_YEAR_TO_MONTH
SQL_LONGVARBINARY

SQL_LONGVARCHAR
SQL_NUMERIC
SQL_REAL
SQL_SMALLINT
SQL_TIME
SQL_TIMESTAMP
SQL_TINYINT
SQL_VARBINARY
SQL_VARCHAR
SQL_WCHAR
SQL_WLONGVARCHAR
SQL_WVARCHAR

A sintaxe ODBC para a função de conversão de tipo de dados explícito não dá suporte à especificação do formato de conversão. Se a especificação de formatos explícitos tiver suporte da fonte de dados subjacente, um driver deverá especificar um valor padrão ou implementar a especificação de formato.

O argumento value_exp pode ser um nome de coluna, o resultado de outra função escalar ou um literal numérico ou de cadeia de caracteres. Por exemplo:

{ fn CONVERT( { fn CURDATE() }, SQL_CHAR ) }  

converte a saída da função escalar CURDATE em uma cadeia de caracteres.

Como o ODBC não exige um tipo de dados para retornar valores de funções escalares (porque as funções geralmente são específicas da fonte de dados), os aplicativos devem usar a função escalar CONVERT sempre que possível para forçar a conversão de tipo de dados.

Os dois exemplos a seguir ilustram o uso da função CONVERT . Esses exemplos pressupõem a existência de uma tabela chamada EMPLOYEES, com uma coluna EMPNO do tipo SQL_SMALLINT e uma coluna EMPNAME do tipo SQL_CHAR.

Se um aplicativo especificar a seguinte instrução SQL:

SELECT EMPNO FROM EMPLOYEES WHERE {fn CONVERT(EMPNO,SQL_CHAR)} LIKE '1%'  
  • Um driver para ORACLE converte a instrução SQL para:

    SELECT EMPNO FROM EMPLOYEES WHERE to_char(EMPNO) LIKE '1%'  
    
  • Um driver para SQL Server converte a instrução SQL para:

    SELECT EMPNO FROM EMPLOYEES WHERE convert(char,EMPNO) LIKE '1%'  
    

Se um aplicativo especificar a seguinte instrução SQL:

SELECT {fn ABS(EMPNO)}, {fn CONVERT(EMPNAME,SQL_SMALLINT)}  
   FROM EMPLOYEES WHERE EMPNO <> 0  
  • Um driver para ORACLE converte a instrução SQL para:

    SELECT abs(EMPNO), to_number(EMPNAME) FROM EMPLOYEES WHERE EMPNO <> 0  
    
  • Um driver para SQL Server converte a instrução SQL para:

    SELECT abs(EMPNO), convert(smallint, EMPNAME) FROM EMPLOYEES  
       WHERE EMPNO <> 0  
    
  • Um driver para Ingres converte a instrução SQL para:

    SELECT abs(EMPNO), int2(EMPNAME) FROM EMPLOYEES WHERE EMPNO <> 0