Respostas:
CONVERT
é específico do SQL Server, CAST
é ANSI.
CONVERT
é mais flexível, pois você pode formatar datas etc. Além disso, elas são praticamente iguais. Se você não se importa com os recursos estendidos, use CAST
.
EDITAR:
Conforme observado por @beruic e @CF nos comentários abaixo, há uma possível perda de precisão quando uma conversão implícita é usada (que é onde você não usa nem CAST nem CONVERT). Para obter mais informações, consulte CAST e CONVERT e, em particular, este gráfico: Gráfico de conversão de tipos de dados do SQL Server . Com essas informações extras, o conselho original permanece o mesmo. Use CAST sempre que possível.
O Convert tem um parâmetro de estilo para a conversão de data em string.
CAST é SQL padrão, mas CONVERT é apenas para o dialeto T-SQL. Temos uma pequena vantagem para converter no caso de data e hora.
Com CAST, você indica a expressão e o tipo de destino; com CONVERT, existe um terceiro argumento que representa o estilo da conversão, suportado por algumas conversões, como entre cadeias de caracteres e valores de data e hora. Por exemplo, CONVERT (DATE, '1/2/2012', 101) converte a cadeia de caracteres literal em DATE usando o estilo 101 que representa o padrão dos Estados Unidos.
Para expandir a resposta acima copiada por Shakti , consegui medir uma diferença de desempenho entre as duas funções.
Eu estava testando o desempenho das variações da solução para essa pergunta e descobri que o desvio padrão e os tempos de execução máximos eram maiores ao usar CAST
.
* Vezes em milissegundos, arredondados para o 1/300 de segundo mais próximo, conforme a precisão do DateTime
tipo
Algo que ninguém parece ter notado ainda é legibilidade. Tendo…
CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)
... pode ser mais fácil de entender do que ...
CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)
CAST(Column1 AS int)
é mais lógico para ler do que CONVERT(int, Column1)
mesmo para expressões longas