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 DateTimetipo
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