web-dev-qa-db-fra.com

T-SQL Cast versus Convertir

Quelles sont les directives générales concernant l'utilisation de CAST par rapport à CONVERT? Existe-t-il des problèmes de performance liés au choix de l'un par rapport à l'autre? Est-ce qu'on se rapproche de ANSI-SQL?

310
BuddyJoe

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

CONVERT est plus flexible en ce sens que vous pouvez formater des dates, etc. En dehors de cela, elles sont à peu près les mêmes. Si vous ne vous souciez pas des fonctionnalités étendues, utilisez CAST.

MODIFIER:

Comme noté par @beruic et @ C-F dans les commentaires ci-dessous, il existe une perte de précision possible lorsqu'une conversion implicite est utilisée (c'est-à-dire une conversion pour laquelle vous n'utilisez ni CAST ni CONVERT). Pour plus d'informations, voir CAST et CONVERT et en particulier ce graphique: Tableau de conversion du type de données SQL Server . Avec cette information supplémentaire, le conseil initial reste toujours le même. Utilisez CAST si possible.

326
Matthew Farwell

Convert a un paramètre de style pour les conversions de date en chaîne.

http://msdn.Microsoft.com/en-us/library/ms187928.aspx

27
jason saldo

CAST est un langage SQL standard, mais pas CONVERT (uniquement pour le dialecte T-SQL), nous avons un petit avantage pour la conversion 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 de 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 en utilisant le style 101 représentant le standard américain.

cordialement,

10

Pour développer la réponse ci-dessuscopié par Shakti, J’ai pu mesurer une différence de performance entre les deux fonctions.

J'essayais la performance des variations de la solution à cette question et constatais que l'écart type et les durées d'exécution maximales étaient plus grandes avec CAST.

Runtimes in milliseconds * Temps en millisecondes, arrondi au 1/300ème de seconde près selon le précision du type DateTime

5
Elaskanator

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

4
RakeshP

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
    )
3
Atario