Respuestas:
CONVERT
es específico de SQL Server, CAST
es ANSI.
CONVERT
es más flexible ya que puedes formatear fechas, etc. Aparte de eso, son más o menos lo mismo. Si no te interesan las funciones ampliadas, úsalas CAST
.
EDITAR:
Como lo señalan @beruic y @CF en los comentarios a continuación, existe una posible pérdida de precisión cuando se usa una conversión implícita (es decir, donde no se usa CAST ni CONVERT). Para obtener más información, vea CAST y CONVERT y, en particular, este gráfico: Tabla de conversión de tipos de datos de SQL Server . Con esta información adicional, el consejo original sigue siendo el mismo. Use CAST donde sea posible.
Convertir tiene un parámetro de estilo para las conversiones de fecha a cadena.
CAST es SQL estándar, pero CONVERT es solo para el dialecto T-SQL. Tenemos una pequeña ventaja para convertir en el caso de datetime.
Con CAST, indica la expresión y el tipo de destino; Con CONVERT, hay un tercer argumento que representa el estilo para la conversión, que es compatible con algunas conversiones, como entre cadenas de caracteres y valores de fecha y hora. Por ejemplo, CONVERTIR (FECHA, '1/2/2012', 101) convierte la cadena de caracteres literales a FECHA utilizando el estilo 101 que representa el estándar de los Estados Unidos.
Para ampliar la respuesta anterior copiada por Shakti , he podido medir una diferencia de rendimiento entre las dos funciones.
Estaba probando el rendimiento de las variaciones de la solución a esta pregunta y descubrí que la desviación estándar y los tiempos de ejecución máximos eran mayores cuando se usaba CAST
.
* Tiempos en milisegundos, redondeados a la 1/300 de segundo más cercana según la precisión del DateTime
tipo
Algo que nadie parece haber notado todavía es la legibilidad. Teniendo…
CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)
... puede ser más fácil de entender que ...
CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)
CAST(Column1 AS int)
es más lógico leer que CONVERT(int, Column1)
incluso para expresiones largas