CAST et CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)

S’APPLIQUE À : ouiSQL Server (à partir de 2008) ouiAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Ces fonctions convertissent une expression d’un type de données en un autre.These functions convert an expression of one data type to another.

Exemple : Changer le type de données d’entréeExample: Change the input datatype

CastCast

SELECT 9.5 AS Original, CAST(9.5 AS int) AS int, 
    CAST(9.5 AS decimal(6,4)) AS decimal;

ConvertConvert


SELECT 9.5 AS Original, CONVERT(int, 9.5) AS int, 
    CONVERT(decimal(6,4), 9.5) AS decimal;

Voici l'ensemble des résultats.Here is the result set.

OriginalOriginal INTint Décimaldecimal
9.59.5 99 9.50009.5000

Consultez les exemples dans la suite de cette rubrique.See the examples later in this topic.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- CAST Syntax:  
CAST ( expression AS data_type [ ( length ) ] )  

-- CONVERT Syntax:  
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )  

ArgumentsArguments

expressionexpression
Toute expression valide.Any valid expression.

data_typedata_type
Type de données cible.The target data type. Exemples : xml, bigint et sql_variant.This includes xml, bigint, and sql_variant. Les types de données alias ne sont pas autorisés.Alias data types cannot be used.

lengthlength
Entier facultatif qui spécifie la longueur du type de données cible.An optional integer that specifies the length of the target data type. La valeur par défaut est 30.The default value is 30.

stylestyle
Expression d’entier qui spécifie comment la fonction CONVERT doit traduire expression.An integer expression that specifies how the CONVERT function will translate expression. Si le style est NULL, une valeur NULL est retournée.For a style value of NULL, NULL is returned. La plage est déterminée par data_type.data_type determines the range.

Types de retourReturn types

Retourne expression traduite en data_type.Returns expression, translated to data_type.

Styles de date et d'heureDate and Time Styles

Quand expression est un type de données de date ou d’heure, style peut prendre l’une des valeurs indiquées dans le tableau suivant.For a date or time data type expression, style can have one of the values shown in the following table. Les autres valeurs sont traitées comme étant 0.Other values are processed as 0. À partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x), les seuls styles pris en charge lors de la conversion des types de date et d’heure en datetimeoffset sont 0 ou 1.Beginning with SQL Server 2012 (11.x)SQL Server 2012 (11.x), the only styles supported, when converting from date and time types to datetimeoffset, are 0 or 1. Tous les autres styles de conversion retournent l'erreur 9809.All other conversion styles return error 9809.

Note

SQL ServerSQL Server prend en charge le format de date dans le style arabe à l’aide de l’algorithme koweitien.supports the date format, in Arabic style, with the Kuwaiti algorithm.

Sans siècle (aa) (1)Without century (yy) (1) Avec siècle (aaaa)With century (yyyy) StandardStandard Entrée/sortie (3)Input/Output (3)
- 0 ou 100 (1,2)0 or 100 (1,2) Valeur par défaut pour datetime et smalldatetimeDefault for datetime and smalldatetime mois jj aaaa hh:miAM (ou PM)mon dd yyyy hh:miAM (or PM)
11 101101 États-UnisU.S. 1 = mm/jj/aa1 = mm/dd/yy
101 = mm/jj/aaaa101 = mm/dd/yyyy
22 102102 ANSIANSI 2 = aa.mm.jj2 = yy.mm.dd
102 = aaaa.mm.jj102 = yyyy.mm.dd
33 103103 Anglais/FrançaisBritish/French 3 = jj/mm/aa3 = dd/mm/yy
103 = jj/mm/aaaa103 = dd/mm/yyyy
44 104104 GermanGerman 4 = jj.mm.aa4 = dd.mm.yy
104 = jj.mm.aaaa104 = dd.mm.yyyy
55 105105 ItalienItalian 5 = jj-mm-aa5 = dd-mm-yy
105 = jj-mm-aaaa105 = dd-mm-yyyy
66 106 (1)106 (1) - 6 = jj mois aa6 = dd mon yy
106 = jj mois aaaa106 = dd mon yyyy
77 107 (1)107 (1) - 7 = Mois jj, aa7 = Mon dd, yy
107 = Mois jj, aaaa107 = Mon dd, yyyy
88 108108 - hh:mi:sshh:mi:ss
- 9 ou 109 (1,2)9 or 109 (1,2) Valeur par défaut + millièmes de secondesDefault + milliseconds mois jj aaaa hh:mi:ss:mmmAM (ou PM)mon dd yyyy hh:mi:ss:mmmAM (or PM)
1010 110110 États-UnisUSA 10 = mm-jj-aa10 = mm-dd-yy
110 = mm-jj-aaaa110 = mm-dd-yyyy
1111 111111 JaponJAPAN 11 = aa/mm/jj11 = yy/mm/dd
111 = aaaa/mm/jj111 = yyyy/mm/dd
1212 112112 ISOISO 12 = aammjj12 = yymmdd
112 = aaaammjj112 = yyyymmdd
- 13 ou 113 (1,2)13 or 113 (1,2) Valeur par défaut Europe + millièmes de secondesEurope default + milliseconds jj mois aaaa hh:mi:ss:mmm (24h)dd mon yyyy hh:mi:ss:mmm(24h)
1414 114114 - hh:mi:ss:mmm(24h)hh:mi:ss:mmm(24h)
- 20 ou 120 (2)20 or 120 (2) ODBC canoniqueODBC canonical aaaa-mm-jj hh:mi:ss (24h)yyyy-mm-dd hh:mi:ss(24h)
- 21 ou 121 (2)21 or 121 (2) Valeur par défaut canonique ODBC (avec millisecondes) pour time, date, datetime2, et datetimeoffsetODBC canonical (with milliseconds) default for time, date, datetime2, and datetimeoffset aaaa-mm-jj hh:mi:ss.mmm (24h)yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126 (4)126 (4) ISO8601ISO8601 aaaa-mm-jjThh:mi:ss.mmm (sans espace)yyyy-mm-ddThh:mi:ss.mmm (no spaces)

Remarque : Pour une valeur en millisecondes (mmm) égale à 0, la valeur de fraction décimale n’est pas affichée.Note: For a milliseconds (mmm) value of 0, the millisecond decimal fraction value will not display. Par exemple, la valeur « 2012-11-07T18:26:20.000 » est affichée comme « 2012-11-07T18:26:20 ».For example, the value '2012-11-07T18:26:20.000 displays as '2012-11-07T18:26:20'.
- 127(6, 7)127(6, 7) ISO8601 avec fuseau horaire Z.ISO8601 with time zone Z. aaaa-mm-jjThh:mi:ss.mmmZ (sans espace)yyyy-mm-ddThh:mi:ss.mmmZ (no spaces)

Remarque : Pour une valeur en millisecondes (mmm) égale à 0, la valeur décimale n’est pas affichée.Note: For a milliseconds (mmm) value of 0, the millisecond decimal value will not display. Par exemple, la valeur « 2012-11-07T18:26:20.000 » est affichée comme « 2012-11-07T18:26:20 ».For example, the value '2012-11-07T18:26:20.000 will display as '2012-11-07T18:26:20'.
- 130 (1,2)130 (1,2) Hijri (5)Hijri (5) jj mois aaaa hh:mi:ss:mmmAMdd mon yyyy hh:mi:ss:mmmAM

Dans ce style, mois correspond à une représentation Unicode Hijri à plusieurs jetons du nom complet du mois.In this style, mon represents a multi-token Hijri unicode representation of the full month name. Cette valeur n’est pas retournée correctement sur les installations en anglais américain par défaut de SSMS.This value does not render correctly on a default US installation of SSMS.
- 131 (2)131 (2) Hijri (5)Hijri (5) jj/mm/yyyy hh:mi:ss:mmmAMdd/mm/yyyy hh:mi:ss:mmmAM

1 Ces valeurs de style retournent des résultats non déterministes.1 These style values return nondeterministic results. Inclut tous les styles (aa, c'est-à-dire sans siècle) et un sous-ensemble de styles (aaaa, c'est-à-dire avec siècle).Includes all (yy) (without century) styles and a subset of (yyyy) (with century) styles.

2 Les valeurs par défaut (0 ou 100, 9 ou 109, 13 ou 113, 20 ou 120 et 21 ou 121) retournent toujours le siècle (aaaa).2 The default values (0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).

3 Entrée lors de la conversion en données de type datetime ; ou encore, sortie lors de la conversion en données caractères.3 Input when you convert to datetime; output when you convert to character data.

4 Conçue pour le langage XML.4 Designed for XML use. Pour la conversion de données datetime ou smalldatetime en données caractères, le format de sortie est décrit dans le tableau précédent.For conversion from datetime or smalldatetime to character data, see the previous table for the output format.

5 Hijri est un système de calendrier avec différentes variantes.5 Hijri is a calendar system with several variations. SQL ServerSQL Server utilise l'algorithme koweitien.uses the Kuwaiti algorithm.

Important

Par défaut, SQL ServerSQL Server interprète les années à deux chiffres par rapport à l'année de coupure 2049.By default, SQL ServerSQL Server interprets two-digit years based on a cutoff year of 2049. Autrement dit, SQL Server interprète l’année à deux chiffres 49 comme étant 2049 et l’année 50 comme étant 1950.That means that SQL Server interprets the two-digit year 49 as 2049 and the two-digit year 50 as 1950. De nombreuses applications clientes, comme celles basées sur les objets Automation, utilisent l’année de coupure 2030.Many client applications, including those based on Automation objects, use a cutoff year of 2030. SQL ServerSQL Server fournit l’option de configuration Année de coupure à deux chiffres permettant de modifier l’année de coupure utilisée par SQL ServerSQL Server.provides the two digit year cutoff configuration option to change the cutoff year used by SQL ServerSQL Server. Cela permet de traiter les dates de manière cohérente.This allows for the consistent treatment of dates. Nous vous recommandons d'utiliser la fonctionnalité d'années exprimées sur quatre chiffres.We recommend specifying four-digit years.

6 Prise en charge uniquement lors de la conversion de données caractères en datetime ou smalldatetime.6 Only supported when casting from character data to datetime or smalldatetime. Lors de la conversion de données caractères représentant des composants de date ou d’heure uniquement en type de données datetime ou smalldatetime, le composant d’heure non spécifié est défini sur 00:00:00.000 et le composant de date non spécifié est défini sur 1900-01-01.When casting character data representing only date or only time components to the datetime or smalldatetime data types, the unspecified time component is set to 00:00:00.000, and the unspecified date component is set to 1900-01-01.

7 L’indicateur de fuseau horaire facultatif Z facilite le mappage des valeurs datetime XML qui possèdent des informations de fuseau horaire aux valeurs SQL ServerSQL Server datetime dépourvues d’informations de fuseau horaire.7Use the optional time zone indicator Z to make it easier to map XML datetime values that have time zone information to SQL ServerSQL Server datetime values that have no time zone. Z indique le fuseau horaire UTC-0.Z indicates time zone UTC-0. Le décalage HH:MM, dans la direction + ou -, indique d’autres fuseaux horaires.The HH:MM offset, in the + or - direction, indicates other time zones. Par exemple : 2006-12-12T23:45:12-08:00.For example: 2006-12-12T23:45:12-08:00.

Quand vous convertissez des données smalldatetime en données caractères, les styles comportant des secondes ou des millisecondes affichent des zéros à ces positions.When converting smalldatetime to character data, the styles that include seconds or milliseconds show zeros in these positions. Quand vous convertissez des valeurs datetime ou smalldatetime, utilisez une longueur de type de données char ou varchar appropriée pour tronquer les parties de date inutiles.When converting from datetime or smalldatetime values, use an appropriate char or varchar data type length to truncate unwanted date parts.

Quand vous convertissez des données caractères en données datetimeoffset avec un style qui inclut une heure, un décalage de fuseau horaire est ajouté au résultat.When converting character data to datetimeoffset, using a style that includes a time, a time zone offset is appended to the result.

Styles float et realfloat and real styles

Quand expression est un type float ou real, style peut prendre l’une des valeurs indiquées dans le tableau suivant.For a float or real expression, style can have one of the values shown in the following table. Les autres valeurs sont traitées comme étant 0.Other values are processed as 0.

ValeurValue SortieOutput
0 (valeur par défaut)0 (default) 6 chiffres maximum.A maximum of 6 digits. À utiliser pour la notation scientifique si nécessaire.Use in scientific notation, when appropriate.
11 Toujours 8 chiffres.Always 8 digits. À utiliser obligatoirement pour la notation scientifique.Always use in scientific notation.
22 Toujours 16 chiffres.Always 16 digits. À utiliser obligatoirement pour la notation scientifique.Always use in scientific notation.
33 Toujours 17 chiffres.Always 17 digits. À utiliser pour la conversion sans perte.Use for lossless conversion. Avec ce style, la conversion de chaque valeur float ou real distincte en chaîne de caractères distincte est garantie.With this style, every distinct float or real value is guaranteed to convert to a distinct character string.

S’applique à : Azure SQL DatabaseAzure SQL Database à partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x).Applies to: Azure SQL DatabaseAzure SQL Database, and starting in SQL Server 2016 (13.x)SQL Server 2016 (13.x).
126, 128, 129126, 128, 129 Incluses pour des raisons d’héritage et peuvent être dépréciées dans une version ultérieure.Included for legacy reasons; a future release could deprecate these values.

Styles money et smallmoneymoney and smallmoney styles

Quand expression est un type money ou smallmoney, style peut prendre l’une des valeurs indiquées dans le tableau suivant.For a money or smallmoney expression, style can have one of the values shown in the following table. Les autres valeurs sont traitées comme étant 0.Other values are processed as 0.

ValeurValue SortieOutput
0 (valeur par défaut)0 (default) Pas de virgule tous les trois chiffres à gauche du point décimal, et deux chiffres à droite de celui-ci.No commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Exemple : 4235.98.Example: 4235.98.
11 Insertion d’une virgule tous les trois chiffres à gauche du point décimal, et deux chiffres à droite de celui-ci.Commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Exemple : 3,510.92.Example: 3,510.92.
22 Pas de virgule tous les trois chiffres à gauche du point décimal, et quatre chiffres à droite de celui-ci.No commas every three digits to the left of the decimal point, and four digits to the right of the decimal point

Exemple : 4235.9819.Example: 4235.9819.
126126 Équivalent du style 2 lors de la conversion en char(n) ou varchar(n).Equivalent to style 2, when converting to char(n) or varchar(n)

styles xmlxml styles

Quand expression est un type xml, style peut prendre l’une des valeurs indiquées dans le tableau suivant.For an xml expression, style can have one of the values shown in the following table. Les autres valeurs sont traitées comme étant 0.Other values are processed as 0.

ValeurValue SortieOutput
0 (valeur par défaut)0 (default) Utilisez le comportement d’analyse par défaut permettant de supprimer les espaces non significatifs et n’autorisant pas de sous-ensemble DTD interne.Use default parsing behavior that discards insignificant white space, and does not allow for an internal DTD subset.

Remarque : Si vous effectuez une conversion vers le type de données xml, les espaces non significatifs SQL ServerSQL Server sont gérés différemment de ceux dans XML 1.0.Note: When converting to the xml data type, SQL ServerSQL Server insignificant white space is handled differently than in XML 1.0. Pour plus d’informations, consultez Créer des instances de données XML.For more information, see Create Instances of XML Data.
11 Maintien des espaces non significatifs.Preserve insignificant white space. Ce paramètre de style définit la gestion par défaut de xml:space pour correspondre au comportement de xml:space="preserve".This style setting sets the default xml:space handling to match the behavior of xml:space="preserve".
22 Activation du traitement limité de sous-ensembles DTD internes.Enable limited internal DTD subset processing.

Si cette option est activée, le serveur peut utiliser les informations suivantes fournies dans un sous-ensemble DTD interne afin de procéder à des opérations d’analyse autres que celles de validation des données.If enabled, the server can use the following information that is provided in an internal DTD subset, to perform nonvalidating parse operations.

- Les valeurs par défaut concernant les attributs sont alors appliquées- Defaults for attributes are applied
- Les références à des entités internes sont résolues et développées- Internal entity references are resolved and expanded
- Le modèle de contenu DTD fait ensuite l’objet d’une vérification syntaxique- The DTD content model is checked for syntactical correctness

L’analyseur ignore les sous-ensembles DTD externes.The parser ignores external DTD subsets. Il n’évalue pas non plus la déclaration des balises XML au niveau de l’attribut standalone pour vérifier s’il a la valeur yes ou no.Also, it does not evaluate the XML declaration to see whether the standalone attribute has a yes or no value. Il analyse cependant l’instance XML comme s’il s’agissait d’un document autonome.Instead, it parses the XML instance as a stand-alone document.
33 Maintien des espaces non significatifs et activation du traitement limité de sous-ensembles DTD internes.Preserve insignificant white space, and enable limited internal DTD subset processing.

Styles binairesBinary styles

Quand expression est un type binary(n), char(n), varbinary(n) ou varchar(n), style peut prendre l’une des valeurs indiquées dans le tableau suivant.For a binary(n), char(n), varbinary(n), or varchar(n) expression, style can have one of the values shown in the following table. Les valeurs de style qui ne sont pas répertoriées dans le tableau retournent une erreur.Style values not listed in the table will return an error.

ValeurValue SortieOutput
0 (valeur par défaut)0 (default) Traduit des caractères ASCII en octets binaires ou des octets binaires en caractères ASCII.Translates ASCII characters to binary bytes, or binary bytes to ASCII characters. Chaque caractère ou octet est converti 1:1.Each character or byte is converted 1:1.

Si data_type est un type binaire, les caractères 0x sont ajoutés à gauche du résultat.For a binary data_type, the characters 0x are added to the left of the result.
1, 21, 2 Si data_type est un type binaire, l’expression doit être une expression de caractères.For a binary data_type, the expression must be a character expression. L’expression doit être composée d’un nombre pair de chiffres hexadécimaux (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f).The expression must have an even number of hexadecimal digits (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f). Si le style a la valeur 1, les caractères 0x doivent être les deux premiers caractères de l’expression.If the style is set to 1, the must have 0x as the first two characters. Si l’expression contient un nombre impair de caractères ou si l’un des caractères n’est pas valide, une erreur est générée.If the expression contains an odd number of characters, or if any of the characters is invalid, an error is raised.

Si la longueur de l’expression convertie dépasse la longueur de data_type, le résultat est tronqué à droite.If the length of the converted expression exceeds the length of the data_type, the result is right truncated.

Les data_type de longueur fixe qui sont plus longs que le résultat converti se voient ajouter des zéros à droite du résultat.Fixed length data_types larger than the converted result have zeros added to the right of the result.

Un data_type de type caractère nécessite une expression binaire.A data_type of type character requires a binary expression. Chaque caractère binaire est converti en deux caractères hexadécimaux.Each binary character is converted into two hexadecimal characters. Si la longueur de l’expression convertie dépasse la longueur de data_type, elle est tronquée à droite.If the length of the converted expression exceeds the length of the data_type, it will be right truncated.

Si data_type est un type caractère de taille fixe et que la longueur du résultat converti est inférieure à la longueur de data_type, des espaces sont ajoutés à droite de l’expression convertie pour conserver un nombre pair de chiffres hexadécimaux.For a fixed size character type data_type, if the length of the converted result is less than its length of the data_type, spaces are added to the right of the converted expression, to maintain an even number of hexadecimal digits.

Des caractères 0x sont ajoutés à gauche du résultat converti pour le style 1.The characters 0x will be added to the left of the converted result for style 1.

Conversions implicitesImplicit conversions

Pour les conversions implicites, il n’est pas nécessaire de spécifier la fonction CAST ou CONVERT.Implicit conversions do not require specification of either the CAST function or the CONVERT function. En revanche, les conversions explicites requièrent la spécification de la fonction CAST ou CONVERT.Explicit conversions require specification of the CAST function or the CONVERT function. L’illustration ci-dessous reprend toutes les conversions de types de données explicites et implicites autorisées pour les types de données SQL ServerSQL Server fournis par le système.The following illustration shows all explicit and implicit data type conversions allowed for SQL ServerSQL Server system-supplied data types. Ces types sont notamment bigint, sql_variant et xml.These include bigint, and sql_variant, and xml. Aucune conversion implicite d’attribution de valeur n’est effectuée à partir du type de données sql_variant, mais une conversion implicite vers sql_variant existe.There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.

Conseil

Ce graphique est disponible en fichier PDF téléchargeable dans le Centre de téléchargement Microsoft.The Microsoft Download Center has this chart available for download as a PDF file.

Table de conversion de types de donnéesData type conversion table

Quand vous effectuez une conversion entre datetimeoffset et les types de caractères char, nchar, nvarchar et varchar, la partie du décalage de fuseau horaire convertie doit toujours comporter des chiffres doubles pour HH et pour MM.When you convert between datetimeoffset and the character types char, nchar, nvarchar, and varchar, the converted time zone offset part should always have double digits for both HH and MM. Par exemple, -08:00.For example, -08:00.

Note

Les données Unicode utilisent toujours un nombre pair d’octets et vous devez par conséquent faire attention lorsque vous convertissez des données de type binary ou varbinary vers ou à partir des types de données pris en charge par Unicode.Because Unicode data always uses an even number of bytes, use caution when you convert binary or varbinary to or from Unicode supported data types. Ainsi, la conversion suivante ne retourne pas la valeur hexadécimale 41.For example, the following conversion does not return a hexadecimal value of 41. Elle retourne la valeur hexadécimale 4100 : SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).It returns a hexadecimal value of 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).

Types de données de valeur élevéeLarge-value data types

Les types de données correspondant à des valeurs élevées ont le même comportement de conversion, à la fois implicite et explicite, que leurs équivalents de valeurs plus faibles, notamment en ce qui concerne les types nvarchar, varbinary et varchar.Large-value data types have the same implicit and explicit conversion behavior as their smaller counterparts - specifically, the nvarchar, varbinary, and varchar data types. Vous devez cependant prendre en compte les recommandations suivantes :However, consider the following guidelines:

  • Une conversion du type image en varbinary(max) et vice versa fonctionne comme une conversion implicite et il en va de même pour les conversions entre les types text et varchar(max), et ntext et nvarchar(max).Conversion from image to varbinary(max), and vice-versa, operates as an implicit conversion, as do conversions between text and varchar(max), and ntext and nvarchar(max).
  • La conversion de types de données de valeur élevée, comme c’est le cas pour le type varchar(max), en type équivalent de valeur plus faible, par exemple varchar, reste aussi une conversion implicite, mais la valeur trop grande risque d’être tronquée si elle dépasse la longueur indiquée autorisée pour le type de données de valeur plus modeste.Conversion from large-value data types, such as varchar(max), to a smaller counterpart data type, such as varchar, is an implicit conversion, but truncation occurs if the size of the large value exceeds the specified length of the smaller data type.
  • Les conversions de nvarchar, varbinary ou varchar en leurs équivalents de valeur élevée se déroulent de façon implicite.Conversion from nvarchar, varbinary, or varchar to their corresponding large-value data types happens implicitly.
  • Enfin, les conversions du type de données sql_variant en type plus conséquent correspondent cependant à une conversion explicite.Conversion from the sql_variant data type to the large-value data types is an explicit conversion.
  • Il reste à savoir que les types de données de valeur élevée ne peuvent pas être convertis en sql_variant.Large-value data types cannot be converted to the sql_variant data type.

Pour plus d’informations sur la conversion à partir du type de données xml, consultez Créer des instances de données XML.For more information about conversion from the xml data type, see Create Instances of XML Data.

type de données xmlxml data type

Lors de la conversion explicite ou implicite du type de données xml en type de données de chaîne ou binaire, le contenu du type de données xml est sérialisé par rapport à un ensemble défini de règles.When you explicitly or implicitly cast the xml data type to a string or binary data type, the content of the xml data type is serialized based on a defined set of rules. Pour plus d’informations sur ces règles, consultez Définir la sérialisation des données XML.For information about these rules, see Define the Serialization of XML Data. Pour plus d’informations sur la conversion des autres types de données vers le type xml, consultez Créer des instances de données XML.For information about conversion from other data types to the xml data type, see Create Instances of XML Data.

types de données text et imagetext and image data types

Les types de données text et image ne prennent pas en charge la conversion automatique de types de données.The text and image data types do not support automatic data type conversion. Vous pouvez convertir explicitement des données de type text en données caractères, et des données de type image en données binary ou varbinary, mais la longueur maximale est de 8 000 octets.You can explicitly convert text data to character data, and image data to binary or varbinary, but the maximum length is 8000 bytes. Si vous tentez une conversion incorrecte, par exemple une expression de type caractères incluant des lettres et convertie en type int, SQL ServerSQL Server retourne un message d’erreur.If you try an incorrect conversion, for example trying to convert a character expression that includes letters to an int, SQL ServerSQL Server returns an error message.

Classement des résultatsOutput Collation

Quand l’entrée et la sortie de CAST ou CONVERT sont des chaînes de caractères, l’entrée et la sortie présentent les mêmes classement et étiquette de classement.When the CAST or CONVERT functions output a character string, and they receive a character string input, the output has the same collation and collation label as the input. Si l'entrée n'est pas une chaîne de caractères, la sortie présente le classement par défaut de la base de données et une étiquette de classement de contrainte par défaut.If the input is not a character string, the output has the default collation of the database, and a collation label of coercible-default. Pour plus d’informations, consultez Priorité de classement (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

Pour attribuer un classement différent à la sortie, appliquez la clause COLLATE à l'expression de résultat de la fonction CAST ou CONVERT.To assign a different collation to the output, apply the COLLATE clause to the result expression of the CAST or CONVERT function. Exemple :For example:

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

Troncation et arrondi des résultatsTruncating and rounding results

Lors de la conversion d’une expression de type binaire ou caractères (binary, char, nchar, nvarchar, varbinary ou varchar) en une expression d’un type de données différent, l’opération de conversion peut tronquer les données de sortie, afficher uniquement en partie les données de sortie ou retourner une erreur.When converting character or binary expressions (binary, char, nchar, nvarchar, varbinary, or varchar) to an expression of a different data type, the conversion operation could truncate the output data, only partially display the output data, or return an error. Ces situations se produisent si le résultat est trop court pour pouvoir être affiché.These cases will occur if the result is too short to display. Les conversions en binary, char, nchar, nvarchar, varbinary ou varchar sont tronquées, sauf pour celles répertoriées dans le tableau suivant.Conversions to binary, char, nchar, nvarchar, varbinary, or varchar are truncated, except for the conversions shown in the following table.

Du type de donnéesFrom data type Au type de donnéesTo data type RésultatsResult
int, smallint ou tinyintint, smallint, or tinyint charchar *
varcharvarchar *
ncharnchar EE
nvarcharnvarchar EE
money, smallmoney, numeric, decimal, float ou realmoney, smallmoney, numeric, decimal, float, or real charchar EE
varcharvarchar EE
ncharnchar EE
nvarcharnvarchar EE

* = Expression résultante trop courte pour être affichée* = Result length too short to display

E = Erreur retournée car l'expression résultante est trop courte pour être affichée.E = Error returned because result length is too short to display.

SQL ServerSQL Server garantit que seules des conversions en boucle, c’est-à-dire qui convertissent un type de données en un autre puis à nouveau en son type d’origine, restituent les mêmes valeurs d’une version à l’autre de l’application.guarantees that only roundtrip conversions, in other words conversions that convert a data type from its original data type and back again, yield the same values from version to version. L'exemple suivant illustre un tel cas de figure :The following example shows such a roundtrip conversion:

DECLARE @myval decimal (5, 2);  
SET @myval = 193.57;  
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5));  
-- Or, using CONVERT  
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval));  

Note

N’essayez pas de construire des valeurs binary, puis de les convertir en un type de données de catégorie numérique.Do not construct binary values, and then convert them to a data type of the numeric data type category. SQL ServerSQL Server ne garantit pas que le résultat d’une conversion de type de données decimal ou numeric en binary est le même entre les différentes versions de SQL ServerSQL Server.does not guarantee that the result of a decimal or numeric data type conversion, to binary, will be the same between versions of SQL ServerSQL Server.

L'exemple suivant illustre une expression résultante trop petite pour être affichée.The following example shows a resulting expression that is too small to display.

USE AdventureWorks2012;  
GO  
SELECT p.FirstName, p.LastName, SUBSTRING(p.Title, 1, 25) AS Title,
    CAST(e.SickLeaveHours AS char(1)) AS [Sick Leave]  
FROM HumanResources.Employee e JOIN Person.Person p 
    ON e.BusinessEntityID = p.BusinessEntityID  
WHERE NOT e.BusinessEntityID >5;  

Voici l'ensemble des résultats.Here is the result set.

FirstName   LastName      Title   Sick Leave
---------   ------------- ------- --------`
Ken         Sanchez       NULL   *
Terri       Duffy         NULL   *
Roberto     Tamburello    NULL   *
Rob         Walters       NULL   *
Gail        Erickson      Ms.    *
(5 row(s) affected)  

Quand vous convertissez des types de données qui diffèrent par le nombre de décimales, SQL Server retourne parfois une valeur résultante tronquée et une valeur arrondie à d’autres moments.When you convert data types that differ in decimal places, SQL Server will sometimes return a truncated result value, and at other times it will return a rounded value. Le tableau suivant illustre ce comportement.This table shows the behavior.

FromFrom PourTo ComportementBehavior
numericnumeric numericnumeric ArrondiRound
numericnumeric Intint TronquéTruncate
numericnumeric moneymoney ArrondiRound
moneymoney Intint ArrondiRound
moneymoney numericnumeric ArrondiRound
floatfloat Intint TronquéTruncate
floatfloat numericnumeric ArrondiRound

La conversion des valeurs float qui utilisent la notation scientifique en decimal ou en numeric est limitée à des valeurs d’une précision de 17 chiffres uniquement.Conversion of float values that use scientific notation to decimal or numeric is restricted to values of precision 17 digits only. Toute valeur avec une précision plus élevée que 17 sera arrondie à zéro.Any value with precision higher than 17 rounds to zero.
floatfloat datetimedatetime ArrondiRound
datetimedatetime Intint ArrondiRound

Par exemple, les valeurs 10,6496 et -10,6496 peuvent être tronquées ou arrondies pendant la conversion en types int ou numeric :For example, the values 10.6496 and -10.6496 may be truncated or rounded during conversion to int or numeric types:

SELECT  CAST(10.6496 AS int) as trunc1,
         CAST(-10.6496 AS int) as trunc2,
         CAST(10.6496 AS numeric) as round1,
         CAST(-10.6496 AS numeric) as round2;

Les résultats de la requête sont présentés dans le tableau suivant :Results of the query are shown in the following table:

trunc1trunc1 trunc2trunc2 round1round1 round2round2
1010 -10-10 1111 -11-11

Lors de la conversion de types de données où le type de données cible compte moins de chiffres décimaux que le type de données source, la valeur obtenue est arrondie.When converting data types where the target data type has fewer decimal places than the source data type, the value is rounded. Par exemple, la conversion suivante retourne $10.3497 :For example, this conversion returns $10.3497:

SELECT CAST(10.3496847 AS money);

SQL ServerSQL Server retourne un message d’erreur lors de la conversion de données char, nchar, nvarchar ou varchar non numériques en données decimal, float, int ou numeric.returns an error message when converting nonnumeric char, nchar, nvarchar, or varchar data to decimal, float, int, numeric. SQL ServerSQL Server retourne également un message d’erreur lorsqu’une chaîne vide (« ») est convertie en données de type numeric ou decimal.also returns an error when an empty string (" ") is converted to numeric or decimal.

Certaines conversions de date/heure sont non déterministes.Certain datetime conversions are nondeterministic

Le tableau ci-dessous répertorie les styles pour lesquels la conversion chaîne-datetime est non déterministe.The following table lists the styles for which the string-to-datetime conversion is nondeterministic.

Tous les styles inférieurs à 1001All styles below 1001 106106
107107 109109
113113 130130

1 À l’exception des styles 20 et 211 With the exception of styles 20 and 21

Pour plus d’informations, consultez Conversion non déterministe de chaînes de date littérale en valeurs DATE.For more information, see Nondeterministic conversion of literal date strings into DATE values.

Caractères supplémentaires (paires de substitution)Supplementary characters (surrogate pairs)

Depuis SQL Server 2012 (11.x)SQL Server 2012 (11.x), si vous utilisez les classements de caractères supplémentaires (SC), une opération de conversion CAST du type nchar ou nvarchar en type nchar ou nvarchar de plus petite longueur n’est pas tronquée à l’intérieur d’une paire de substitution.Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), when using supplementary character (SC) collations, a CAST operation from nchar or nvarchar to an nchar or nvarchar type of smaller length will not truncate inside a surrogate pair. Au lieu de cela, elle est tronquée avant le caractère supplémentaire.Instead, the operation truncates before the supplementary character. Par exemple, le fragment de code suivant laisse @x avec seulement 'ab'.For example, the following code fragment leaves @x holding just 'ab'. Il n'y a pas assez d'espace pour conserver le caractère supplémentaire.There is not enough space to hold the supplementary character.

DECLARE @x NVARCHAR(10) = 'ab' + NCHAR(0x10000);  
SELECT CAST (@x AS NVARCHAR(3));  

Lors de l’utilisation de classements SC, le comportement de CONVERT est analogue à celui de CAST.When using SC collations, the behavior of CONVERT, is analogous to that of CAST.

Prise en charge de la compatibilitéCompatibility support

Dans les versions antérieures de SQL ServerSQL Server, le style par défaut pour les opérations CAST et CONVERT sur les types de données time et datetime2 est 121, sauf si l’un des types est utilisé dans une expression de colonne calculée.In earlier versions of SQL ServerSQL Server, the default style for CAST and CONVERT operations on time and datetime2 data types is 121, except when either type is used in a computed column expression. Pour les colonnes calculées, le style par défaut est 0.For computed columns, the default style is 0. Ce comportement influe sur les colonnes calculées lorsqu'elles sont créées, utilisées dans des requêtes impliquant le paramétrage automatique, ou utilisées dans des définitions de contraintes.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

Quand le niveau de compatibilité est 110 et plus, le style par défaut pour les opérations CAST et CONVERT sur les types de données time et datetime2 est toujours 121.Under compatibility level 110 and higher, the CAST and CONVERT operations on the time and datetime2 datatypes always have 121 as the default style. Si une requête repose sur l’ancien comportement, utilisez un niveau de compatibilité inférieur à 110, ou spécifiez explicitement le style 0 dans la requête affectée.If a query relies on the old behavior, use a compatibility level less than 110, or explicitly specify the 0 style in the affected query.

La mise à niveau de la base de données vers le niveau de compatibilité 110 et supérieur ne modifie pas les données utilisateur stockées sur le disque.Upgrading the database to compatibility level 110 and higher will not change user data that has been stored to disk. Vous devez corriger manuellement ces données comme il convient.You must manually correct this data as appropriate. Par exemple, si vous avez utilisé SELECT INTO pour créer une table à partir d’une source contenant une expression de colonne calculée décrite ci-dessus, les données (utilisant le style 0) sont stockées à la place de la définition de colonne calculée.For example, if you used SELECT INTO to create a table from a source containing a computed column expression described above, the data (using style 0) would be stored rather than the computed column definition itself. Vous devez mettre à jour manuellement ces données pour qu’elles correspondent au style 121.You must manually update this data to match style 121.

ExemplesExamples

A.A. Utilisation simultanée de CAST et CONVERTUsing both CAST and CONVERT

Ces exemples récupèrent le nom de chaque produit possédant un 3 comme premier chiffre de son prix et convertit sa valeur ListPrice en type int.These examples retrieve the name of the product, for those products that have a 3 as the first digit of list price, and converts their ListPrice values to int.

-- Use CAST  
USE AdventureWorks2012;  
GO  
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice  
FROM Production.Product  
WHERE CAST(ListPrice AS int) LIKE '3%';  
GO  

-- Use CONVERT.  
USE AdventureWorks2012;  
GO  
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice  
FROM Production.Product  
WHERE CONVERT(int, ListPrice) LIKE '3%';  
GO  

B.B. Utilisation de CAST avec des opérateurs arithmétiquesUsing CAST with arithmetic operators

Cet exemple illustre le calcul effectué sur une colonne unique (intitulée Computed) où le total des ventes de l’année en cours (SalesYTD) est divisé par le pourcentage de commission (dont la valeur se trouve dans CommissionPCT).This example calculates a single column computation (Computed) by dividing the total year-to-date sales (SalesYTD) by the commission percentage (CommissionPCT). Cette valeur est arrondie au nombre entier le plus proche, puis convertie en type de données int.This value is rounded to the nearest whole number and is then CAST to an int data type.

USE AdventureWorks2012;  
GO  
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS Computed  
FROM Sales.SalesPerson   
WHERE CommissionPCT != 0;  
GO  

Voici l'ensemble des résultats.Here is the result set.

Computed
------
379753754
346698349
257144242
176493899
281101272
0  
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107
(14 row(s) affected)  

C.C. Utilisation de CAST pour la concaténation d'expressionsUsing CAST to concatenate

Cet exemple illustre la concaténation d’expressions de type non-caractères par le biais de CAST.This example concatenates noncharacter expressions by using CAST. Il utilise la base de données AdventureWorksDW.It uses the AdventureWorksDW database.

SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice  
FROM dbo.DimProduct  
WHERE ListPrice BETWEEN 350.00 AND 400.00;  

Voici l'ensemble des résultats.Here is the result set.

ListPrice
------------------------
The list price is 357.06
The list price is 364.09
The list price is 364.09
The list price is 364.09
The list price is 364.09  

D.D. Utilisation de CAST pour faciliter la lecture des résultatsUsing CAST to produce more readable text

Cet exemple s’appuie sur CAST dans la liste SELECT pour convertir la colonne Name en colonne de type char(10).This example uses CAST in the SELECT list, to convert the Name column to a char(10) column. Il utilise la base de données AdventureWorksDW.It uses the AdventureWorksDW database.

SELECT DISTINCT CAST(EnglishProductName AS char(10)) AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE EnglishProductName LIKE 'Long-Sleeve Logo Jersey, M';  

Voici l'ensemble des résultats.Here is the result set.

Name        ListPrice
----------  ---------
Long-Sleev  31.2437
Long-Sleev  32.4935
Long-Sleev  49.99  

E.E. Utilisation de CAST avec la clause LIKEUsing CAST with the LIKE clause

Cet exemple convertit les valeurs SalesYTD de la colonne money en type de données int, puis en type de données char(20) pour que la clause LIKE puisse les utiliser.This example converts the money column SalesYTD values to data type int, and then to data typechar(20), so that the LIKE clause can use it.

USE AdventureWorks2012;  
GO  
SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID  
FROM Person.Person AS p   
JOIN Sales.SalesPerson AS s   
    ON p.BusinessEntityID = s.BusinessEntityID  
WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%';  
GO  

Voici l'ensemble des résultats.Here is the result set.

FirstName        LastName            SalesYTD         BusinessEntityID
---------------- ------------------- ---------------- -------------
Tsvi             Reiter              2811012.7151      279
Syed             Abbas               219088.8836       288
Rachel           Valdez              2241204.0424      289
(3 row(s) affected)  

F.F. Utilisation de CONVERT ou de CAST avec des données au format XML typéUsing CONVERT or CAST with typed XML

Les exemples suivants illustrent l’utilisation de la fonction CONVERT pour convertir des données en XML typé avec les type et colonnes de données XML (SQL Server).These examples show use of CONVERT to convert data to typed XML, by using the XML Data Type and Columns (SQL Server).

Cet exemple convertit une chaîne incluant des espaces, du texte et des balises en XML typé, puis supprime tous les espaces non significatifs (correspondant aux espaces délimitant les nœuds) :This example converts a string with white space, text and markup into typed XML, and removes all insignificant white space (boundary white space between nodes):

SELECT CONVERT(XML, '<root><child/></root>')  

Cet exemple convertit une chaîne similaire incluant des espaces, du texte et des balises en XML typé, mais conserve les espaces non significatifs (correspondant aux espaces délimitant les nœuds) :This example converts a similar string with white space, text and markup into typed XML and preserves insignificant white space (boundary white space between nodes):

SELECT CONVERT(XML, '<root>          <child/>         </root>', 1)  

Enfin, cet exemple convertit une chaîne similaire incluant des espaces, du texte et des balises en XML typé :This example casts a string with white space, text, and markup into typed XML:

SELECT CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)  

Pour obtenir plus d’exemples, consultez Créer des instances de données XML.See Create Instances of XML Data for more examples.

G.G. Utilisation de CAST et de CONVERT avec des données de type datetimeUsing CAST and CONVERT with datetime data

À compter des valeurs GETDATE(), cet exemple affiche la date et l’heure actuelles, utilise CAST pour convertir la date et l’heure actuelles en type de données caractères, puis utilise CONVERT pour afficher la date et l’heure au format ISO 8601.Starting with GETDATE() values, this example displays the current date and time, uses CAST to change the current date and time to a character data type, and then uses CONVERT to display the date and time in the ISO 8601 format.

SELECT   
   GETDATE() AS UnconvertedDateTime,  
   CAST(GETDATE() AS nvarchar(30)) AS UsingCast,  
   CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;  
GO  

Voici l'ensemble des résultats.Here is the result set.

UnconvertedDateTime     UsingCast              UsingConvertTo_ISO8601
----------------------- ---------------------- ------------------------------
2006-04-18 09:58:04.570 Apr 18 2006  9:58AM    2006-04-18T09:58:04.570
(1 row(s) affected)  

Cet exemple est plus ou moins l’inverse de l’exemple précédent.This example is approximately the opposite of the previous example. Cet exemple affiche une date et une heure sous forme de données caractères, utilise CAST pour convertir les données caractères en type de données datetime, puis utilise CONVERT pour convertir le type de données caractères en type de données datetime.This example displays a date and time as character data, uses CAST to change the character data to the datetime data type, and then uses CONVERT to change the character data to the datetime data type.

SELECT   
   '2006-04-25T15:50:59.997' AS UnconvertedText,  
   CAST('2006-04-25T15:50:59.997' AS datetime) AS UsingCast,  
   CONVERT(datetime, '2006-04-25T15:50:59.997', 126) AS UsingConvertFrom_ISO8601 ;  
GO  

Voici l'ensemble des résultats.Here is the result set.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2006-04-25T15:50:59.997 2006-04-25 15:50:59.997 2006-04-25 15:50:59.997
(1 row(s) affected)  

H.H. Utilisation de CONVERT avec des données binaires et caractèresUsing CONVERT with binary and character data

Ces exemples montrent les résultats de la conversion de données binaires et caractères en utilisant des styles différents.These examples show the results of binary and character data conversion, using different styles.

--Convert the binary value 0x4E616d65 to a character value.  
SELECT CONVERT(char(8), 0x4E616d65, 0) AS [Style 0, binary to character];  

Voici l'ensemble des résultats.Here is the result set.

Style 0, binary to character
----------------------------
Name  
(1 row(s) affected)  

Cet exemple montre que Style 1 peut forcer la troncation de résultat.This example shows that Style 1 can force result truncation. Les caractères 0x dans le jeu de résultats forcent la troncation.The characters 0x in the result set force the truncation.

SELECT CONVERT(char(8), 0x4E616d65, 1) AS [Style 1, binary to character];  

Voici l'ensemble des résultats.Here is the result set.

Style 1, binary to character
------------------------------
0x4E616D
(1 row(s) affected)  

Cet exemple montre que Style 2 ne tronque pas le résultat, car les caractères 0x ne sont pas inclus dans le résultat.This example shows that Style 2 does not truncate the result, because the result does not include the characters 0x.

SELECT CONVERT(char(8), 0x4E616d65, 2) AS [Style 2, binary to character];  

Voici l'ensemble des résultats.Here is the result set.

Style 2, binary to character
------------------------------
4E616D65
(1 row(s) affected)  

Convertit la valeur de caractère « Name » en valeur binaire.Convert the character value 'Name' to a binary value.

SELECT CONVERT(binary(8), 'Name', 0) AS [Style 0, character to binary];  

Voici l'ensemble des résultats.Here is the result set.

Style 0, character to binary
----------------------------
0x4E616D6500000000
(1 row(s) affected)  
SELECT CONVERT(binary(4), '0x4E616D65', 1) AS [Style 1, character to binary];  

Voici l'ensemble des résultats.Here is the result set.

Style 1, character to binary
---------------------------- 
0x4E616D65
(1 row(s) affected)  
SELECT CONVERT(binary(4), '4E616D65', 2) AS [Style 2, character to binary];  

Voici l'ensemble des résultats.Here is the result set.

Style 2, character to binary  
----------------------------------  
0x4E616D65
(1 row(s) affected)  

I.I. Convertit les types de données de date et d'heureConverting date and time data types

Cet exemple illustre la conversion des types de données date, time et datetime.This example shows the conversion of date, time, and datetime data types.

DECLARE @d1 date, @t1 time, @dt1 datetime;  
SET @d1 = GETDATE();  
SET @t1 = GETDATE();  
SET @dt1 = GETDATE();  
SET @d1 = GETDATE();  
-- When converting date to datetime the minutes portion becomes zero.  
SELECT @d1 AS [date], CAST (@d1 AS datetime) AS [date as datetime];  
-- When converting time to datetime the date portion becomes zero   
-- which converts to January 1, 1900.  
SELECT @t1 AS [time], CAST (@t1 AS datetime) AS [time as datetime];  
-- When converting datetime to date or time non-applicable portion is dropped.  
SELECT @dt1 AS [datetime], CAST (@dt1 AS date) AS [datetime as date], 
   CAST (@dt1 AS time) AS [datetime as time];  

Exemples : Azure SQL Data WarehouseAzure SQL Data Warehouse et Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

J.J. Utilisation de CAST et CONVERTUsing CAST and CONVERT

Cet exemple récupère le nom de chaque produit possédant un 3 au premier chiffre de son prix et convertit sa valeur ListPrice en type int. Il utilise la base de données AdventureWorksDW.This example retrieves the name of the product for those products that have a 3 in the first digit of their list price, and converts the ListPrice of these products to int. It uses the AdventureWorksDW database.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(ListPrice AS int) LIKE '3%';  

Cet exemple montre la même requête, qui utilise CONVERT au lieu de CAST.This example shows the same query, using CONVERT instead of CAST. Il utilise la base de données AdventureWorksDW.It uses the AdventureWorksDW database.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CONVERT(int, ListPrice) LIKE '3%';  

K.K. Utilisation de CAST avec des opérateurs arithmétiquesUsing CAST with arithmetic operators

Cet exemple effectue un calcul de valeur de colonne unique en divisant le prix unitaire du produit (UnitPrice) par le pourcentage de remise (UnitPriceDiscountPct).This example calculates a single column value by dividing the product unit price (UnitPrice) by the discount percentage (UnitPriceDiscountPct). Ce résultat est ensuite arrondi au nombre entier le plus proche, puis converti en type de données int.This result is then rounded to the nearest whole number, and finally converted to an int data type. Cet exemple utilise la base de données AdventureWorksDW.This example uses the AdventureWorksDW database.

SELECT ProductKey, UnitPrice,UnitPriceDiscountPct,  
       CAST(ROUND (UnitPrice*UnitPriceDiscountPct,0) AS int) AS DiscountPrice  
FROM dbo.FactResellerSales  
WHERE SalesOrderNumber = 'SO47355'   
      AND UnitPriceDiscountPct > .02;  

Voici l'ensemble des résultats.Here is the result set.

ProductKey  UnitPrice  UnitPriceDiscountPct  DiscountPrice
----------  ---------  --------------------  -------------
323         430.6445   0.05                  22
213         18.5043    0.05                  1
456         37.4950    0.10                  4
456         37.4950    0.10                  4
216         18.5043    0.05                  1  

L.L. Utilisation de CAST avec la clause LIKEUsing CAST with the LIKE clause

Cet exemple convertit la valeur ListPrice de la colonne money en type int, puis en type char(20) pour que la clause LIKE puisse l’utiliser.This example converts the money column ListPrice to an int type, and then to a char(20) type, so that the LIKE clause can use it. Cet exemple utilise la base de données AdventureWorksDW.This example uses the AdventureWorksDW database.

SELECT EnglishProductName AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(CAST(ListPrice AS int) AS char(20)) LIKE '2%';  

M.M. Utilisation de CAST et de CONVERT avec des données de type datetimeUsing CAST and CONVERT with datetime data

Cet exemple affiche la date et l’heure actuelles, utilise CAST pour les convertir en type de données caractères, puis utilise CONVERT pour les afficher au format ISO 8601.This example displays the current date and time, uses CAST to change the current date and time to a character data type, and finally uses CONVERT display the date and time in the ISO 8601 format. Cet exemple utilise la base de données AdventureWorksDW.This example uses the AdventureWorksDW database.

SELECT TOP(1)  
   SYSDATETIME() AS UnconvertedDateTime,  
   CAST(SYSDATETIME() AS nvarchar(30)) AS UsingCast,  
   CONVERT(nvarchar(30), SYSDATETIME(), 126) AS UsingConvertTo_ISO8601  
FROM dbo.DimCustomer;  

Voici l'ensemble des résultats.Here is the result set.

UnconvertedDateTime     UsingCast                     UsingConvertTo_ISO8601  
---------------------   ---------------------------   ---------------------------  
07/20/2010 1:44:31 PM   2010-07-20 13:44:31.5879025   2010-07-20T13:44:31.5879025  

Cet exemple est plus ou moins l’inverse de l’exemple précédent.This example is the rough opposite of the previous example. Cet exemple affiche une date et une heure sous forme de données caractères, utilise CAST pour convertir les données caractères en type de données datetime, puis utilise CONVERT pour convertir le type de données caractères en type de données datetime.This example displays a date and time as character data, uses CAST to change the character data to the datetime data type, and then uses CONVERT to change the character data to the datetime data type. Cet exemple utilise la base de données AdventureWorksDW.This example uses the AdventureWorksDW database.

SELECT TOP(1)   
   '2010-07-25T13:50:38.544' AS UnconvertedText,  
CAST('2010-07-25T13:50:38.544' AS datetime) AS UsingCast,  
   CONVERT(datetime, '2010-07-25T13:50:38.544', 126) AS UsingConvertFrom_ISO8601  
FROM dbo.DimCustomer;  

Voici l'ensemble des résultats.Here is the result set.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2010-07-25T13:50:38.544 07/25/2010 1:50:38 PM   07/25/2010 1:50:38 PM  

Voir aussiSee also

Conversion de type de données (moteur de base de données)Data Type Conversion (Database Engine)
FORMAT (Transact-SQL)FORMAT (Transact-SQL)
STR (Transact-SQL)STR (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)
Fonctions système (Transact-SQL)System Functions (Transact-SQL)
Rédiger des instructions Transact-SQL internationalesWrite International Transact-SQL Statements