2009-04-01 28 views
275

Quelle est la directive générale sur l'utilisation de CAST par rapport à CONVERT? Y a-t-il des problèmes de performance liés au choix de l'un par rapport à l'autre? Est-on plus proche de ANSI-SQL?T-SQL Cast versus Convert

Répondre

303

CONVERT est spécifique à SQL Server, CAST est ANSI.

est plus flexible dans la mesure où vous pouvez mettre en forme des dates, etc. A part cela, ils sont à peu près les mêmes. Si vous ne vous souciez pas des fonctionnalités étendues, utilisez CAST.

EDIT:

Comme l'a noté @beruic et @ C-F dans les commentaires ci-dessous, il est possible perte de précision lors d'une conversion implicite est utilisée (c'est celui où vous utilisez ni CAST, ni Compressé). Pour plus d'informations, voir CAST and CONVERT et en particulier ce graphique: SQL Server Data Type Conversion Chart. Avec cette information supplémentaire, le conseil original reste toujours le même. Utilisez CAST si possible.

+5

Aussi, je crois qu'il ya quelques conversions numériques où CAST doit être utilisé pour préserver la précision, mais je vais avoir du mal à trouver un système fiable source pour cette information. – beruic

+2

@beruic Vous avez raison, il existe des informations dans MSDN: http://msdn.microsoft.com/en-us/library/ms187928.aspx CAST est requis pour préserver la précision lors de la conversion entre les types DECIMAL et NUMERIC. –

+0

@ C-F Où voyez-vous cette information? J'ai suivi le lien, qui ouvre la page générale sur CAST et CONVERT, et la seule information concernant la précision que je peux trouver concerne la conversion des valeurs flottantes qui utilisent la notation scientifique. Puis-je me tromper dans mon commentaire initial? – beruic

7

CAST est standar SQL, mais CONVERT n'est pas (uniquement pour le dialecte T-SQL), nous avons un petit avantage pour convertir dans le cas datetime

avec CAST, vous indiquez l'expression et le type de cible ; avec CONVERT, il existe un troisième argument représentant le style pour la conversion, qui est pris en charge pour certaines conversions, comme entre les chaînes de caractères et les valeurs de date et d'heure. Par exemple, CONVERT (DATE, '1/2/2012', 101) convertit la chaîne de caractères littérale en DATE à l'aide du style 101 représentant la norme des États-Unis.

3

CAST utilise la norme ANSI. En cas de portabilité, cela fonctionnera sur d'autres plateformes. CONVERT est spécifique au serveur sql. Mais est une fonction très forte. Vous pouvez spécifier différents styles pour les dates

0

Quelque chose que personne ne semble avoir encore noté est la lisibilité. Ayant ...

CONVERT(SomeType, 
    SomeReallyLongExpression 
    + ThatMayEvenSpan 
    + MultipleLines 
    ) 

... peut-être plus facile à comprendre que ...

CAST(SomeReallyLongExpression 
    + ThatMayEvenSpan 
    + MultipleLines 
    AS SomeType 
    )