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

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabaseouiAzure SQL Data Warehouse ouiParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Convertit une expression d'un type de données en un autre.Converts an expression of one data type to another.
Par exemple, les exemples suivants transformer le type de données d’entrée, deux autres types de données, avec différents niveaux de précision.For example, the following examples change the input datatype, into two other datatypes, with different levels of precision.

SELECT 9.5 AS Original, CAST(9.5 AS int) AS int, 
    CAST(9.5 AS decimal(6,4)) AS decimal;
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.

Langue sourceOriginal intint decimaldecimal
9.59.5 99 9.50009.5000

Conseil

Nombreux exemples en bas de cette rubrique.Many examples are at the bottom of this topic.

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

SyntaxeSyntax

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

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

ArgumentsArguments

expressionexpression
Valide expression.Is any valid expression.

data_typedata_type
Type de données cible.Is the target data type. Cela inclut les 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.Is 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 entière qui spécifie comment la fonction CONVERT doit traduire expression.Is an integer expression that specifies how the CONVERT function is to translate expression. Si le style est NULL, une valeur NULL est retournée.If style is NULL, NULL is returned. La plage est déterminée par data_type.The range is determined by data_type.

Types de retourReturn types

Retourne expression traduit en data_type.Returns expression translated to data_type.

Styles de date et d'heureDate and Time Styles

Lorsque expression est un type de données date ou heure style peut prendre l’une des valeurs indiquées dans le tableau suivant.When expression is a date or time data type, style can be 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 2012SQL Server 2012, les seuls styles pris en charge lors de la conversion de date et heure types datetimeoffset sont 0 ou 1.Beginning with SQL Server 2012SQL Server 2012, the only styles that are 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 by using 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 AllemandGerman 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 : Lorsque la valeur en millisecondes (mmm) est que 0, la valeur de milliseconde n’est pas affichée.Note: When the value for milliseconds (mmm) is 0, the millisecond value is not displayed. Par exemple, la valeur « 2012-11-07T18:26:20.000 » est affichée comme suit « 2012-11-07T18:26:20 ».For example, the value '2012-11-07T18:26:20.000 is displayed 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 : Lorsque la valeur en millisecondes (mmm) est que 0, la valeur en millisecondes n’est pas affichée.Note: When the value for milliseconds (mmm) is 0, the milliseconds value is not displayed. Par exemple, la valeur « 2012-11-07T18:26:20.000 » est affichée comme suit « 2012-11-07T18:26:20 ».For example, the value '2012-11-07T18:26:20.000 is displayed as '2012-11-07T18:26:20'.
- 130 (1,2)130 (1,2) Calendrier islamique (5)Hijri (5) jj mois aaaa hh:mi:ss:mmmAMdd mon yyyy hh:mi:ss:mmmAM
Dans ce style, « mois » représente une représentation unicode Hijri à plusieurs jetons pour le nom complet du mois.In this style, mon represents a multi-token Hijri unicode representation of the full month's name. Cette valeur ne rend pas correctement sur une valeur par défaut installation américain de SSMS.This value does not render correctly on a default US installation of SSMS.
- 131 (2)131 (2) Calendrier islamique (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 (style* 0* ou 100, 9 ou 109, 13 ou 113, 20 ou 120, et 21 ou 121) Retourne toujours le siècle (aaaa).2 The default values (style* 0* or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).

3 d’entrée lors de la conversion datetime; sortie lorsque vous convertissez des données de type caractère.3 Input when you convert to datetime; output when you convert to character data.

4 conçu pour une utilisation XML.4 Designed for XML use. Pour la conversion de datetime ou smalldatetime en données caractères, le format de sortie est tel que décrit dans le tableau précédent.For conversion from datetime or smalldatetime to character data, the output format is as described in the previous table.

5 Hijri est un système calendaire possédant plusieurs variations.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, l'année à deux chiffres 49 est interprétée comme étant 2049 et l'année 50 comme étant 1950.That is, the two-digit year 49 is interpreted as 2049 and the two-digit year 50 is interpreted as 1950. De nombreuses applications clientes, comme celles basées sur les objets Automation, utilisent l'année de coupure 2030.Many client applications, such as those based on Automation objects, use a cutoff year of 2030. SQL ServerSQL Serverfournit l’option two digit year cutoff configuration qui modifie l’année de coupure utilisée par SQL ServerSQL Server et permet le traitement cohérent des dates. provides the two digit year cutoff configuration option that changes the cutoff year used by SQL ServerSQL Server and 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 datetime ou smalldatetime.6 Only supported when casting from character data to datetime or smalldatetime. Lorsque les données de caractères qui représente uniquement date ou uniquement les composants d’heure est converti dans le datetime ou smalldatetime des types de données, le composant d’heure non spécifiée a la valeur 00:00:00.000 et le composant de date non spécifié est défini à 1900-01-01.When character data that represents only date or only time components is cast 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.

7l’indicateur de fuseau horaire Z, est utilisé pour faciliter le mappage XML datetime contenant des informations de fuseau horaire pour SQL ServerSQL Server datetime les valeurs ayant aucun fuseau horaire.7The optional time zone indicator, Z, is used 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 est l'indicateur du fuseau horaire UTC-0.Z is the indicator for time zone UTC-0. Les autres fuseaux horaires sont indiqués avec le décalage HH:MM dans la direction + ou -.Other time zones are indicated with HH:MM offset in the + or - direction. Par exemple : 2006-12-12T23:45:12-08:00.For example: 2006-12-12T23:45:12-08:00.

Lorsque vous convertissez des données de caractères de smalldatetime, les styles comportant les secondes ou les millisecondes affichent des zéros à ces positions.When you convert to character data from smalldatetime, the styles that include seconds or milliseconds show zeros in these positions. Vous pouvez tronquer les parties de date indésirables lorsque vous convertissez datetime ou smalldatetime valeurs à l’aide appropriée char ou varchar longueur de type de données.You can truncate unwanted date parts when you convert from datetime or smalldatetime values by using an appropriate char or varchar data type length.

Lorsque vous convertissez datetimeoffset à partir des données de caractères avec un style qui inclut une heure, un décalage de fuseau horaire est ajouté au résultat.When you convert to datetimeoffset from character data with a style that includes a time, a time zone offset is appended to the result.

styles float et realfloat and real styles

Lorsque expression est float ou réel, style peut prendre l’une des valeurs indiquées dans le tableau suivant.When expression is float or real, style can be 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, chaque float distincte ou la valeur réelle est garantie pour convertir une chaîne de caractères distincts.With this style, every distinct float or real value is guaranteed to convert to a distinct character string.
S’applique à : Azure SQL DatabaseAzure SQL Databaseet à partir de SQL Server 2016SQL Server 2016.Applies to: Azure SQL DatabaseAzure SQL Database, and starting in SQL Server 2016SQL Server 2016.
126, 128, 129126, 128, 129 Incluses pour des raisons d'héritage et peuvent être déconseillées dans une version ultérieure.Included for legacy reasons and might be deprecated in a future release.

styles Money et smallmoneymoney and smallmoney styles

Lorsque expression est money ou smallmoney, style peut prendre l’une des valeurs indiquées dans le tableau suivant.When expression is money or smallmoney, style can be 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. Par exemple, 4235.98.No commas every three digits to the left of the decimal point, and two digits to the right of the decimal point; for example, 4235.98.
11 Insertion d'une virgule tous les trois chiffres à gauche du point décimal, et deux chiffres à droite de celui-ci. Par exemple 3,510.92.Commas every three digits to the left of the decimal point, and two digits to the right of the decimal point; for example, 3,510.92.
22 Pas de virgule tous les trois chiffres à gauche du point décimal, et quatre chiffres à droite de celui-ci. Par exemple 4235.9819.No commas every three digits to the left of the decimal point, and four digits to the right of the decimal point; for 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

Lorsque expression est xml, style peut prendre l’une des valeurs indiquées dans le tableau suivant.When expression is xml, style can be 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 : lorsque vous convertissez la xml type de données, SQL ServerSQL Server espaces blancs non significatifs est géré différemment de XML 1.0.Note: When you convert 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 les Instances de XML données.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 valeur par défaut XML : space la manière de gérer se comportent comme si XML : space = « preserve » a été spécifié à la place.This style setting sets the default xml:space handling to behave the same as if xml:space="preserve" has been specified instead.
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 pour les attributs sont appliqués.- Defaults for attributes are applied.
-Références d’entité interne sont résolues et développées.- Internal entity references are resolved and expanded.
-Le modèle de contenu DTD est 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 la déclaration XML pour voir si le autonome attribut a la valeur Oui ou aucune, mais analyse cependant l’instance XML comme s’il s’agit d’un document autonome.It also does not evaluate the XML declaration to see whether the standalone attribute is set yes or no, but instead parses the XML instance as if it is 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 BinaryBinary styles

Lorsque expression est Binary, varbinary (n), char (n), ou varchar (n), style peut prendre l’une des valeurs indiquées dans le tableau suivant.When expression is binary(n), varbinary(n), char(n), or varchar(n), style can be 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 that are not listed in the table return an error.

ValeurValue SortieOutput
0 (valeur par défaut)0 (default) Traduit des caractères ASCII en octets de binaire ou des octets de binaire 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 le data_type est un type binaire, les caractères 0 x sont ajoutés à gauche du résultat.If the data_type is a binary type, the characters 0x are added to the left of the result.
1, 21, 2 Si le data_type est un type binaire, l’expression doit être une expression de caractères.If the data_type is a binary type, the expression must be a character expression. Le 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 be composed of 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 est défini sur 1 les caractères 0 x doivent être les deux premiers caractères dans l’expression.If the style is set to 1 the characters 0x must be the first two characters in the expression. 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 are invalid an error is raised.
Si la longueur de l’expression convertie est supérieure à la longueur de la data_type le résultat est tronqué à droite.If the length of the converted expression is greater than the length of the data_type the result is right truncated.
Longueur fixe data_types qui sont plus longs que le résultat converti a ajouter des zéros à droite du résultat.Fixed length data_types that are larger than the converted result has zeros added to the right of the result.
Si le data_type est un type caractère, l'expression doit être une expression binaire.If the data_type is a character type, the expression must be 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 est supérieure à la data_type longueur, il est tronqué à droite.If the length of the converted expression is greater than the data_type length, it will be right truncated.
Si le data_type est un type de caractère de taille fixe et la longueur du résultat converti est inférieure à la longueur de la data_type; des espaces sont ajoutés à droite de l’expression convertie pour conserver un nombre pair de chiffres hexadécimaux.If the data_type is a fix sized character type and 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.
Les caractères 0 x sera ajouté à gauche du résultat converti pour style 1.The characters 0x will be added to the left of the converted result for style 1.

Conversions implicitesImplicit conversions

Une conversion implicite est une conversion pour laquelle il n'est pas nécessaire de spécifier les fonctions CAST ou CONVERT.Implicit conversions are those conversions that occur without specifying either the CAST or CONVERT function. À l'inverse, une conversion explicite requiert que la fonction CAST ou CONVERT soit indiquée.Explicit conversions are those conversions that require the CAST or CONVERT function to be specified. 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 that are allowed for SQL ServerSQL Server system-supplied data types. Ceux-ci incluent xml, bigint, et sql_variant.These include xml, bigint, and sql_variant. Il n’existe aucune conversion implicite lors de l’attribution de la sql_variant type de données, mais il existe une conversion implicite vers sql_variant.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 tant qu’un fichier PDF téléchargeable dans le Microsoft Download Center.This chart is available as a downloadable PDF file at the Microsoft Download Center.

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

Lorsque vous effectuez une conversion entre datetimeoffset et les types de caractères char, varchar, nchar, et nvarchar le fuseau horaire converti partie décalage doit toujours être composée de deux chiffres pour HH et MM, par exemple, -08:00.When you convert between datetimeoffset and the character types char, varchar, nchar, and nvarchar the converted time zone offset part should always be double digits for both HH and MM for example, -08:00.

Note

Étant donné que les données Unicode utilisent toujours un nombre pair d’octets, soyez prudent lorsque vous convertissez binaire ou varbinary vers ou depuis Unicode prises en charge les types de données.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 retourne la valeur hexadécimale 4100 et non pas 41 : SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).For example, the following conversion does not return a hexadecimal value of 41; it returns 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).

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

Types de données de valeur élevée affichent le même comportement de conversion implicite et explicite que leurs homologues plus petits, plus précisément la varchar, nvarchar et varbinary des types de données.Large-value data types exhibit the same implicit and explicit conversion behavior as their smaller counterparts, specifically the varchar, nvarchar and varbinary data types. Vous devez cependant prendre en compte les recommandations suivantes :However, you should consider the following guidelines:

  • Conversion de image à varbinary (max) et vice versa est une conversion implicite, et sont donc des conversions entre texte et varchar (max), et ntext et nvarchar (max).Conversion from image to varbinary(max) and vice-versa is an implicit conversion, and so are conversions between text and varchar(max), and ntext and nvarchar(max).
  • Types de conversion de données de grande valeur, tels que varchar (max), à un plus petites équivalent et type de données, tel que varchar, est une conversion implicite, mais une troncation se produit si la valeur élevée est trop volumineux pour le la longueur spécifiée du type de données plus petit.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 large value is too big for the specified length of the smaller data type.
  • Conversion de varchar, nvarchar, ou varbinary à leurs données de valeur élevée correspondantes types s’effectue implicitement.Conversion from varchar, nvarchar, or varbinary to their corresponding large-value data types is performed implicitly.
  • Conversion à partir de la sql_variant type de données pour les types de données de grande valeur est une conversion explicite.Conversion from the sql_variant data type to the large-value data types is an explicit conversion.
  • Impossible de convertir les types de données de valeur élevée pour le sql_variant type de données.Large-value data types cannot be converted to the sql_variant data type.

Pour plus d’informations sur la conversion à partir de la xml de type de données, consultez créer les Instances de XML données.For more information about how to convert from the xml data type, see Create Instances of XML Data.

type de données xmlxml data type

Lorsque vous explicitement ou implicitement converti le xml type de données à une chaîne ou de type de données binaire, le contenu de la xml type de données est sérialisé selon un ensemble 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 set of rules. Pour plus d’informations sur ces règles, consultez définir la sérialisation de données XML.For information about these rules, see Define the Serialization of XML Data. Pour plus d’informations sur la conversion d’autres types de données en le xml de type de données, consultez créer les Instances de XML données.For information about how to convert 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

Conversion automatique n’est pas pris en charge pour le texte et image des types de données.Automatic data type conversion is not supported for the text and image data types. Vous pouvez convertir explicitement texte données en données caractères, et image données binaire 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 essayez d’une conversion incorrecte, par exemple une expression de caractères contenant des lettres pour un int, SQL ServerSQL Server renvoie un message d’erreur.If you try an incorrect conversion such as trying to convert a character expression that includes letters to an int, SQL ServerSQL Server returns an error message.

Classement des résultatsOutput Collation

Lorsque 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 output of CAST or CONVERT is a character string, and the input is a character string, 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 de caractères ou des expressions binaires (char, nchar, nvarchar, varchar, binaire, ou varbinary) à une expression de type de données différent, données peuvent être tronquées, partiellement affichées, ou une erreur est renvoyée, car le résultat est trop court pour être affichée.When you convert character or binary expressions (char, nchar, nvarchar, varchar, binary, or varbinary) to an expression of a different data type, data can be truncated, only partially displayed, or an error is returned because the result is too short to display. Les conversions en char, varchar, nchar, nvarchar, binaire, et varbinary sont tronquées, sauf pour les conversions répertoriées dans le tableau suivant.Conversions to char, varchar, nchar, nvarchar, binary, and varbinary 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ésultatResult
int, smallint, ou tinyintint, smallint, or tinyint charchar *
varcharvarchar *
ncharnchar EE
nvarcharnvarchar EE
Money, smallmoney, numérique, décimal, float, ou réelmoney, smallmoney, numeric, decimal, float, or real charchar EE
varcharvarchar EE
ncharnchar EE
nvarcharnvarchar EE

*= Expression résultante trop courte pour l’afficher.* = 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 Servergarantit que seules les conversions aller-retour, conversions de convertir un type de données à partir de son type de données d’origine et vice versa, les mêmes valeurs d’une version à l’autre. guarantees that only roundtrip conversions, 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 binaire les valeurs et puis de les convertir en un type de données de la catégorie de type de données numérique.Do not try to construct binary values and then convert them to a data type of the numeric data type category. SQL ServerSQL Serverne garantit pas que le résultat d’une décimal ou numérique la conversion en type de données binaire doit être le même entre les 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)  

Si vous convertissez des données dont le type de données diffère sur l'emplacement de la virgule, la valeur résultante peut parfois être tronquée, parfois être arrondie.When you convert data types that differ in decimal places, sometimes the result value is truncated and at other times it is rounded. Le tableau suivant illustre ce comportement.The following table shows the behavior.

DeFrom 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

Conversion de float valeurs qui utilisent la notation scientifique pour décimal ou numérique est limitée à des valeurs de 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 tronquées ou arrondies pendant la conversion int ou numérique types :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;

Résultats de la requête sont affiché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 des conversions entre divers types de données dans lesquelles les types de données cibles comptent moins de chiffres décimaux que les types de données sources, la valeur obtenue est arrondie.When you convert data types in which the target data type has fewer decimal places than the source data type, the value is rounded. Par exemple, le résultat découlant de la conversion suivante est $10.3497 :For example, the result of the following conversion is $10.3497:

SELECT CAST(10.3496847 AS money);

SQL ServerSQL ServerRetourne un message d’erreur lors de la non numérique char, nchar, varchar, ou nvarchar sont converties en données int, float, numérique, ou décimal. returns an error message when nonnumeric char, nchar, varchar, or nvarchar data is converted to int, float, numeric, or decimal. SQL ServerSQL ServerRenvoie également une erreur lorsqu’une chaîne vide (« ») est converti en numérique ou décimal. also returns an error when an empty string (" ") is converted to numeric or decimal.

Certaines conversions de valeurs datetime sont non déterministesCertain 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

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

À compter de SQL Server 2012SQL Server 2012, si vous utilisez des classements de caractères supplémentaires (SC), une opération de conversion à partir de nchar ou nvarchar à un nchar ou nvarchar type de longueur inférieure n’est pas tronqués à l’intérieur d’une paire de substitution ; elle sera tronquée avant le caractère supplémentaire.Beginning in SQL Server 2012SQL Server 2012, if you use 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; it 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 temps et datetime2 des types de données est 121, sauf lorsque le type 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.

Niveau de compatibilité est 110 et supérieur, le style par défaut pour les opérations CAST et CONVERT sur temps et datetime2 des types de données est toujours 121.Under compatibility level 110 and higher, the default style for CAST and CONVERT operations on time and datetime2 data types is always 121. Si votre 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 your 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 qui contenait 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 that contained 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 would need to manually update this data to match style 121.

ExemplesExamples

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

Chacun des exemples récupère le nom de chaque produit possédant un 3 au premier chiffre de son prix et convertit son champ ListPrice en type int.Each example retrieves the name of the product for those products that have a 3 in the first digit of their list price and converts their ListPrice 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

L'exemple suivant 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).The following example calculates a single column computation (Computed) by dividing the total year-to-date sales (SalesYTD) by the commission percentage (CommissionPCT). Le résultat est converti en type de données int après avoir été arrondi au chiffre entier le plus proche.This result is converted to an int data type after being rounded to the nearest whole number.

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

L’exemple suivant concatène les expressions à l’aide de CAST.The following example concatenates noncharacter expressions by using CAST. Utilise AdventureWorksDW.Uses AdventureWorksDW.

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

L’exemple suivant utilise le CAST dans la liste de sélection pour convertir le Name colonne à un char (10) colonne.The following example uses CAST in the SELECT list to convert the Name column to a char(10) column. Utilise AdventureWorksDW.Uses AdventureWorksDW.

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        UnitPrice
----------  ---------
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

L'exemple suivant convertit la colonne money de type SalesYTD en colonne de type int, puis en colonne de type char(20) de façon à pouvoir l'utiliser avec la clause LIKE.The following example converts the money column SalesYTD to an int and then to a char(20) column so that it can be used with the LIKE clause.

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         SalesPersonID
---------------- ------------------- ---------------- -------------
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

Voici plusieurs exemples qui illustrent l’utilisation de CONVERT pour convertir en XML typé à l’aide de la Type de données XML et les colonnes ( SQL Server ) .The following are several examples that show using CONVERT to convert 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):

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):

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:

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

Pour plus d’exemples, consultez créer les Instances de XML données.For more examples, see Create Instances of XML Data.

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

L'exemple suivant 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 8901.The following 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 display the date and time in the ISO 8901 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)  

L'exemple suivant est plus ou moins l'inverse de l'exemple précédent.The following example is approximately the opposite of the previous example. Cet exemple affiche la date et l'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.The 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

Les exemples suivants montrent les résultats de la conversion de données binaires et caractères en utilisant des styles différents.The following examples show the results of converting binary and character data by 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)  

L’exemple suivant montre comment Style 1 pour forcer le résultat est tronqué.The following example shows how Style 1 can force the result to be truncated. La troncation est due à inclure les caractères 0 x dans le résultat.The truncation is caused by including the characters 0x in the result.

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)  

L’exemple suivant montre que 2 de Style ne tronque pas le résultat étant donné que les caractères 0 x ne sont pas inclus dans le résultat.The following example shows that Style 2 does not truncate the result because the characters 0x are not included in the result.

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)  

Convertir la valeur de caractère « Name » en une 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

L'exemple suivant décrit la conversion des types de données date, time, et datetime.The following example demonstrates 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. À l’aide de CAST et CONVERTUsing CAST and CONVERT

Cet exemple récupère le nom du produit pour les produits qui ont un 3 dans le premier chiffre de leurs prix et le convertit leur ListPrice à int. Utilise 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 their ListPrice to int. Uses AdventureWorksDW.

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

Cet exemple montre la même requête, à l’aide de la conversion au lieu de CAST.This example shows the same query, using CONVERT instead of CAST. Utilise AdventureWorksDW.Uses AdventureWorksDW.

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

L’exemple suivant calcule un calcul de colonne unique en divisant le prix unitaire du produit (UnitPrice) par le pourcentage de remise (UnitPriceDiscountPct).The following example calculates a single column computation by dividing the product unit price (UnitPrice) by the discount percentage (UnitPriceDiscountPct). Le résultat est converti en type de données int après avoir été arrondi au chiffre entier le plus proche.This result is converted to an int data type after being rounded to the nearest whole number. Utilise AdventureWorksDW.Uses AdventureWorksDW.

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

L’exemple suivant convertit le money colonne ListPrice à un int type puis un char (20) type afin qu’il peut être utilisé avec la clause LIKE.The following example converts the money column ListPrice to an int type and then to a char(20) type so that it can be used with the LIKE clause. Utilise AdventureWorksDW.Uses AdventureWorksDW.

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

L’exemple suivant affiche la date et heure actuelles, utilise CAST pour modifier la date et l’heure à un type de données caractère, et puis utilise CONVERT affiche la date et l’heure au format ISO 8601.The following 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 display the date and time in the ISO 8601 format. Utilise AdventureWorksDW.Uses AdventureWorksDW.

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  

L'exemple suivant est plus ou moins l'inverse de l'exemple précédent.The following example is approximately the opposite of the previous example. L’exemple affiche une date et heure sous forme de caractères, utilise un CAST pour convertir les données de caractères à la datetime type de données, puis utilise CONVERT pour convertir les données de caractères à la datetime type de données.The 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. Utilise AdventureWorksDW.Uses AdventureWorksDW.

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