Cast di T-SQL contro Converti


325

Qual è la guida generale su quando dovresti usare CASTcontro CONVERT? Esistono problemi di prestazioni relativi alla scelta dell'uno rispetto all'altro? Uno è più vicino ad ANSI-SQL?

Risposte:


339

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.


5
Inoltre, credo che ci siano alcune conversioni numeriche in cui CAST dovrebbe essere usato per preservare la precisione, ma ho difficoltà a trovare una fonte affidabile per queste informazioni.
beruic

2
@beruic Hai ragione, ci sono informazioni in MSDN: msdn.microsoft.com/en-us/library/ms187928.aspx CAST è necessario per preservare la precisione durante la conversione tra i tipi DECIMAL e NUMERIC.
CF

@CF Dove vedi queste informazioni? Ho seguito il link, che apre la pagina generale su CAST e CONVERT, e l'unica informazione sulla precisione che posso trovare è sulla conversione di valori float che usano la notazione scientifica. Potrei sbagliarmi nel mio commento iniziale?
beruic,

6
@beruic Riguarda questa immagine nella parte inferiore dell'articolo i.msdn.microsoft.com/dynimg/IC170617.gif Ora penso che forse la perdita di precisione può verificarsi nella conversione implicita e non si verifica quando si utilizza CAST o CONVERT . Non è del tutto chiaro ...
CF

2
@CF Sono d'accordo sul fatto che non sia molto chiaro e che ci dovrebbe essere sicuramente una documentazione più specifica al riguardo, quindi speriamo che Microsoft lo faccia. Ma ben individuato lì :)
beruic


12

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.



6

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
    )

2
Ma penso che il CAST sia di solito più leggibile. CAST(Column1 AS int)è più logico da leggere che CONVERT(int, Column1)anche per le espressioni lunghe
S. Serpooshan il

4

CAST utilizza lo standard ANSI. In caso di portabilità, questo funzionerà su altre piattaforme. CONVERT è specifico per SQL Server. Ma è una funzione molto forte. È possibile specificare stili diversi per le date

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.