T-SQL Cast versus Convert

Qual é a orientação geral sobre quando você deve usar CAST versus CONVERT ? Há algum problema de desempenho relacionado à escolha de um versus o outro? Está um mais próximo do ANSI-SQL?

CONVERT é específico do SQL Server, CAST é ANSI.

CONVERT é mais flexível na medida em que você pode formatar datas etc. Além disso, elas são praticamente as mesmas. Se você não se importa com os resources estendidos, use CAST .

EDITAR:

Como observado por @beruic e @CF nos comentários abaixo, existe uma possível perda de precisão quando uma conversão implícita é usada (aquela em que 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 tipo de dados do SQL Server . Com essa informação extra, o conselho original ainda permanece o mesmo. Use CAST sempre que possível.

Convert tem um parâmetro de estilo para data para conversões de string.

http://msdn.microsoft.com/pt-br/library/ms187928.aspx

CAST é standar SQL, mas CONVERT não é (somente para o dialeto T-SQL), temos uma pequena vantagem para converter no datetime do caso

com CAST, você indica a expressão e o tipo de alvo; com CONVERT, há um terceiro argumento representando o estilo da conversão, que é suportado por algumas conversões, como entre as cadeias de caracteres e os 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 representando o padrão dos Estados Unidos.

Saudações,

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 usa o padrão ANSI. Em caso de portabilidade, isso funcionará em outras plataformas. CONVERT é específico para o sql server. Mas é uma function muito forte. Você pode especificar estilos diferentes para datas

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 de variações da solução para essa questão e descobri que o desvio padrão e os tempos de execução máximos eram maiores quando se usava o CAST .

Tempos de execução em milissegundos * Vezes em milissegundos, arredondados para 1 / 300º de segundo mais próximo, conforme a precisão do tipo DateTime