357 votes

T-SQL Cast contre Convert

Quelles sont les indications générales sur le moment où vous devez utiliser CAST contre CONVERT ? Y a-t-il des problèmes de performance liés au choix de l'un ou de l'autre ? L'un est-il plus proche d'ANSI-SQL ?

370voto

Matthew Farwell Points 31257

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

CONVERT est plus flexible dans la mesure où vous pouvez formater les dates, etc. À part cela, ils sont à peu près identiques. Si vous ne vous souciez pas des fonctionnalités étendues, utilisez CAST .

EDIT :

Comme l'ont noté @beruic et @C-F dans les commentaires ci-dessous, il y a une perte possible de précision lorsqu'une conversion implicite est utilisée (c'est-à-dire une conversion où vous n'utilisez ni CAST ni CONVERT). Pour plus d'informations, voir CAST et CONVERT et en particulier ce graphique : Tableau de conversion des types de données du serveur SQL . Avec ces informations supplémentaires, le conseil initial reste le même. Utilisez CAST lorsque cela est possible.

5 votes

Par ailleurs, je crois qu'il existe certaines conversions numériques pour lesquelles CAST doit être utilisé afin de préserver la précision, mais j'ai du mal à trouver une source fiable pour cette information.

2 votes

@beruic Vous avez raison, il y a des informations dans MSDN : msdn.microsoft.com/fr/us/library/ms187928.aspx CAST est nécessaire pour préserver la précision lors de la conversion entre les types DECIMAL et NUMERIC.

0 votes

@C-F Où trouvez-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 de valeurs flottantes qui utilisent la notation scientifique. Est-ce que je me trompe dans mon commentaire initial ?

31voto

jason saldo Points 5036

Convert possède un paramètre de style pour les conversions de dates en chaînes de caractères.

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

17voto

Elaskanator Points 687

Pour développer la réponse ci-dessus <a href="https://stackoverflow.com/a/50624016/2799848">copié par Shakti </a> J'ai pu mesurer une différence de performance entre les deux fonctions.

Je testais les performances des variations de la solution pour cette question et nous avons constaté que l'écart type et les temps d'exécution maximaux étaient plus importants lorsque l'on utilisait CAST .

Runtimes in milliseconds *Temps en millisecondes, arrondi au 1/300e de seconde le plus proche, conformément à la norme de l'UE. <a href="https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetime-transact-sql?view=sql-server-2017#rounding-of-datetime-fractional-second-precision" rel="noreferrer"> précision de la <code>DateTime</code> type</a>

17voto

Brian Points 3889

Cast est ansi, convert ne l'est pas.

15voto

CAST est un langage SQL standard, mais CONVERT est réservé au dialecte T-SQL. Nous avons un petit avantage pour convert dans le cas de datetime.

Avec CAST, vous indiquez l'expression et le type cible ; avec CONVERT, il y a un troisième argument représentant le style de 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 en utilisant le style 101 représentant la norme américaine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X