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