Risposte:
CONVERT
è specifico di SQL Server, CAST
è ANSI.
CONVERT
è più flessibile in quanto è possibile formattare date ecc. Oltre a ciò, sono praticamente le stesse. Se non ti interessano le funzionalità estese, usa CAST
.
MODIFICARE:
Come notato da @beruic e @CF nei commenti seguenti, c'è una possibile perdita di precisione quando viene utilizzata una conversione implicita (ovvero quella in cui non si utilizza né CAST né CONVERT). Per ulteriori informazioni, vedere CAST e CONVERT, in particolare questo grafico: diagramma di conversione del tipo di dati di SQL Server . Con queste informazioni extra, il consiglio originale rimane sempre lo stesso. Usa CAST dove possibile.
Converti ha un parametro di stile per le conversioni da data a stringa.
CAST è SQL standard, ma CONVERT è solo per il dialetto T-SQL. Abbiamo un piccolo vantaggio per la conversione in caso di datetime.
Con CAST, si indica l'espressione e il tipo di destinazione; con CONVERT, c'è un terzo argomento che rappresenta lo stile per la conversione, che è supportato da alcune conversioni, come tra stringhe di caratteri e valori di data e ora. Ad esempio, CONVERT (DATE, '1/2/2012', 101) converte la stringa di caratteri letterali in DATE usando lo stile 101 che rappresenta lo standard degli Stati Uniti.
Per espandere la risposta sopra copiata da Shakti , sono stato effettivamente in grado di misurare una differenza di prestazioni tra le due funzioni.
Stavo testando le prestazioni delle variazioni della soluzione a questa domanda e ho scoperto che la deviazione standard e la massima autonomia erano maggiori durante l'utilizzo CAST
.
* Tempi in millisecondi, arrotondati al 1/300 di secondo più vicino secondo la precisione del DateTime
tipo
Qualcosa che nessuno sembra aver ancora notato è la leggibilità. Avere ...
CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)
... potrebbe essere più facile da capire di ...
CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)
CAST(Column1 AS int)
è più logico da leggere che CONVERT(int, Column1)
anche per le espressioni lunghe