2009-04-01 5 views
275

¿Cuál es la orientación general sobre cuándo debe usar CAST frente a CONVERT? ¿Hay algún problema de rendimiento relacionado con elegir uno frente al otro? ¿Está uno más cerca de ANSI-SQL?T-SQL Emitir frente a Convertir

Respuesta

303

CONVERT es específico de SQL Server, CAST es ANSI.

CONVERT es más flexible ya que puede formatear fechas, etc. Aparte de eso, son prácticamente lo mismo. Si no le importan las características ampliadas, use CAST.

EDIT:

Como señaló @beruic y @ C-F en los comentarios, no es posible pérdida de precisión cuando se utiliza una conversión implícita (que es uno en el que utiliza ni echéis ni CONVERTIR). Para más información, ver CAST and CONVERT y en particular este gráfico: SQL Server Data Type Conversion Chart. Con esta información adicional, el consejo original sigue siendo el mismo. Use CAST cuando sea posible.

+5

Además, creo que hay algunas conversiones numéricas donde REPARTO debe utilizarse para preservar la precisión, pero estoy teniendo problemas para encontrar un confiable fuente de esta información. – beruic

+2

@beruic Tiene razón, hay información en MSDN: http://msdn.microsoft.com/en-us/library/ms187928.aspx CAST es necesario para conservar la precisión al convertir entre los tipos DECIMAL y NUMERIC. –

+0

@ C-F ¿Dónde ves esta información? He seguido el enlace, que abre la página general en CAST y CONVERT, y la única información con respecto a la precisión que puedo encontrar es acerca de la conversión de valores flotantes que usan notación científica. ¿Puedo estar equivocado en mi comentario inicial? – beruic

7

CAST es SQL estandar, pero CONVERT no es (sólo para el dialecto de T-SQL), tenemos una pequeña ventaja para convertir en el caso de fecha y hora

con el molde, se indica la expresión y el tipo de destino ; Con CONVERT, hay un tercer argumento que representa el estilo para la conversión, que se admite para 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 literal en FECHA usando el estilo 101 que representa el estándar de los Estados Unidos.

respetos,

3

CAST usa el estándar ANSI. En caso de portabilidad, esto funcionará en otras plataformas. CONVERT es específico para el servidor sql. Pero es una función muy fuerte. Puede especificar diferentes estilos para las fechas

0

Algo que nadie parece haber notado todavía es la legibilidad. Tener ...

CONVERT(SomeType, 
    SomeReallyLongExpression 
    + ThatMayEvenSpan 
    + MultipleLines 
    ) 

... puede ser más fácil de entender que ...

CAST(SomeReallyLongExpression 
    + ThatMayEvenSpan 
    + MultipleLines 
    AS SomeType 
    ) 
Cuestiones relacionadas