¿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
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.
Convert tiene un parámetro de estilo para conversiones de fecha a cadena.
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,
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
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
)
- 1. ¿emitir o convertir un flotador a nvarchar?
- 2. Convertir TSQL a MS-Access SQL
- 3. Una llamada grande frente a varias llamadas TSQL más pequeñas
- 4. Emitir IList a la lista
- 5. NUnit frente a MbUnit frente a MSTest frente a xUnit.net
- 6. Emitir con GetType()
- 7. iterador frente a referencia frente a puntero
- 8. convertir o emitir una lista <t> a EntityCollection <T>
- 9. Cómo (eficientemente) convertir (¿emitir?) Un campo SqlDataReader a su correspondiente tipo de C#?
- 10. ¿Debo emitir advertencias a STDERR o STDOUT?
- 11. TSQL: ¿Cómo convertir la hora local a UTC? (SQL Server 2008)
- 12. variable estática frente a miembro
- 13. Emitir una cadena nula en un entero
- 14. cómo emitir datetime2 como fecha y hora
- 15. Página frente a extensión frente a segmento frente a espacio de tabla
- 16. Terminología de persistencia de objetos: 'repositorio' frente a 'almacenar' frente a 'contexto' frente a 'retriever' vs. (...)
- 17. C# - NHibernate no puede emitir NHibernate.Collection.Generic.PersistentGenericSet a System.Collections.Generic.IList
- 18. db2 equivalente a la tabla temporal tsql
- 19. TSQL - Inserción para llevarlo a SQL dinámico
- 20. Puntero a QList - en() frente a [] operador
- 21. Emitir luego verificar o verificar y luego emitir?
- 22. transacción tsql
- 23. Errores frente a la mejora frente a la nueva función
- 24. Seguridad de Tomcat frente a WebSphere frente a WebLogic
- 25. Desarrollo de iPhone - XMLParser frente a libxml2 frente a TouchXML
- 26. Imagen frente a foto frente a imagen - Modelos de nomenclatura
- 27. TSQL DateTime to DateKey Int
- 28. Vector frente a cadena
- 29. Solicitud() frente a Request.QueryString()
- 30. Consulta frente a vista
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
@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. –
@ 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