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

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure sìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Queste funzioni convertono un'espressione da un tipo di dati a un altro.These functions convert an expression of one data type to another.

SintassiSyntax

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

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

ArgomentiArguments

expressionexpression
Qualsiasi espressione valida.Any valid expression.

data_typedata_type
Tipo di dati di destinazione.The target data type. Include xml, bigint e sql_variant.This includes xml, bigint, and sql_variant. Non è possibile usare i tipi di dati alias.Alias data types cannot be used.

lengthlength
Intero facoltativo che specifica la lunghezza del tipo di dati di destinazione per i tipi di dati che consentono una lunghezza specificata dall'utente.An optional integer that specifies the length of the target data type, for data types that allow a user specified length. Il valore predefinito è 30.The default value is 30.

stylestyle
Espressione integer che specifica il modo in cui la funzione CONVERT converte expression.An integer expression that specifies how the CONVERT function will translate expression. Per un valore di stile NULL, viene restituito NULL.For a style value of NULL, NULL is returned. data_type determina l'intervallo.data_type determines the range.

Tipi restituitiReturn types

Restituisce expression convertito in data_type.Returns expression, translated to data_type.

Stili di data e oraDate and Time styles

Se il tipo di dati di expression è date o time, style può avere uno dei valori indicati nella tabella seguente.For a date or time data type expression, style can have one of the values shown in the following table. Gli altri valori vengono elaborati come 0.Other values are processed as 0. A partire da SQL Server 2012 (11.x)SQL Server 2012 (11.x), gli unici stili supportati nella conversione dai tipi date e time in datetimeoffset sono 0 o 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. Tutti gli altri stili di conversione restituiscono l'errore 9809.All other conversion styles return error 9809.

Nota

SQL ServerSQL Server supporta il formato di data in stile arabo con l'algoritmo kuwaitiano.supports the date format, in Arabic style, with the Kuwaiti algorithm.

Senza il secolo (aa) (1)Without century (yy) (1) Con il secolo (aaaa)With century (yyyy) StandardStandard Input/Output (3)Input/Output (3)
- 0 o 100 (1,2)0 or 100 (1,2) Predefinito per datetime e smalldatetimeDefault for datetime and smalldatetime mes gg aaaa hh:miAM (o PM)mon dd yyyy hh:miAM (or PM)
11 101101 U.S.U.S. 1 = mm/gg/aa1 = mm/dd/yy
101 = mm/gg/aaaa101 = mm/dd/yyyy
22 102102 ANSIANSI 2 = aa.mm.gg2 = yy.mm.dd
102 = aaaa.mm.gg102 = yyyy.mm.dd
33 103103 Inglese Regno Unito/FranceseBritish/French 3 = gg/mm/aa3 = dd/mm/yy
103 = gg/mm/aaaa103 = dd/mm/yyyy
44 104104 TedescoGerman 4 = gg.mm.aa4 = dd.mm.yy
104 = gg.mm.aaaa104 = dd.mm.yyyy
55 105105 ItalianoItalian 5 = gg-mm-aa5 = dd-mm-yy
105 = gg-mm-aaaa105 = dd-mm-yyyy
66 106 (1)106 (1) - 6 = gg mes aa6 = dd mon yy
106 = gg mes aaaa106 = dd mon yyyy
77 107 (1)107 (1) - 7 = Mes gg, aa7 = Mon dd, yy
107 = Mes gg, aaaa107 = Mon dd, yyyy
8 o 248 or 24 108108 - hh:mi:sshh:mi:ss
- 9 o 109 (1,2)9 or 109 (1,2) Valore predefinito + millisecondiDefault + milliseconds mes gg aaaa hh:mi:ss:mmmAM (o PM)mon dd yyyy hh:mi:ss:mmmAM (or PM)
1010 110110 USAUSA 10 = mm-gg-aa10 = mm-dd-yy
110 = mm-gg-aaaa110 = mm-dd-yyyy
1111 111111 GiapponeJAPAN 11 = aa/mm/gg11 = yy/mm/dd
111 = aaaa/mm/gg111 = yyyy/mm/dd
1212 112112 ISOISO 12 = aammgg12 = yymmdd
112 = aaaammgg112 = yyyymmdd
- 13 o 113 (1,2)13 or 113 (1,2) Valore predefinito Europa + millisecondiEurope default + milliseconds gg mes 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 o 120 (2)20 or 120 (2) ODBC canonicoODBC canonical aaaa-mm-gg hh:mi:ss (24h)yyyy-mm-dd hh:mi:ss (24h)
- 21 o 25 o 121 (2)21 or 25 or 121 (2) ODBC canonico (con millisecondi) predefinito per time, date, datetime2 e datetimeoffsetODBC canonical (with milliseconds) default for time, date, datetime2, and datetimeoffset aaaa-mm-gg hh:mi:ss.mmm (24h)yyyy-mm-dd hh:mi:ss.mmm (24h)
2222 - U.S.U.S. mm/gg/aa hh:mi:ss AM (o PM)mm/dd/yy hh:mi:ss AM (or PM)
- 2323 ISO8601ISO8601 aaaa-mm-ggyyyy-mm-dd
- 126 (4)126 (4) ISO8601ISO8601 aaaa-mm-ggThh:mi:ss.mmm (senza spazi)yyyy-mm-ddThh:mi:ss.mmm (no spaces)

Nota: per un valore in millisecondi (mmm) pari a 0, il valore della frazione decimale in millisecondi non verrà visualizzato.Note: For a milliseconds (mmm) value of 0, the millisecond decimal fraction value will not display. Ad esempio, il valore "2012-11-07T18:26:20.000" viene visualizzato come "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 con fuso orario Z.ISO8601 with time zone Z. aaaa-mm-ggThh:mi:ss.mmmZ (senza spazi)yyyy-mm-ddThh:mi:ss.mmmZ (no spaces)

Nota: per un valore in millisecondi (mmm) pari a 0, il valore decimale in millisecondi non verrà visualizzato.Note: For a milliseconds (mmm) value of 0, the millisecond decimal value will not display. Ad esempio, il valore "2012-11-07T18:26:20.000" viene visualizzato come "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) gg mes aaaa hh:mi:ss:mmmAMdd mon yyyy hh:mi:ss:mmmAM

In questo stile, mes è una rappresentazione unicode multi token Hijri del nome completo del mese.In this style, mon represents a multi-token Hijri unicode representation of the full month name. Questo valore non è reso correttamente in un'installazione US predefinita di SSMS.This value does not render correctly on a default US installation of SSMS.
- 131 (2)131 (2) Hijri (5)Hijri (5) gg/mm/aaaa hh:mi:ss:mmmAMdd/mm/yyyy hh:mi:ss:mmmAM

1 Questi valori di stile restituiscono risultati non deterministici.1 These style values return nondeterministic results. Include tutti gli stili (aa) (senza secolo) e un subset di stili (aaaa) (con il secolo).Includes all (yy) (without century) styles and a subset of (yyyy) (with century) styles.

2 I valori predefiniti (0 o 100, 9 o 109, 13 o 113, 20 o 120, 23 e 21 o 25 o 121) restituiscono sempre il secolo (aaaa).2 The default values (0 or 100, 9 or 109, 13 or 113, 20 or 120, 23, and 21 or 25 or 121) always return the century (yyyy).

3 Input quando viene eseguita la conversione nel tipo di dati datetime, output quando viene eseguita la conversione in dati di tipo carattere.3 Input when you convert to datetime; output when you convert to character data.

4 Progettato per l'uso in XML.4 Designed for XML use. Per le conversioni di dati di tipo datetime o smalldatetime in dati di tipo carattere, vedere la tabella precedente per il formato di output.For conversion from datetime or smalldatetime to character data, see the previous table for the output format.

5 Hijri è un sistema di calendario con diverse variazioni.5 Hijri is a calendar system with several variations. In SQL ServerSQL Server viene usato l'algoritmo kuwaitiano.SQL ServerSQL Server uses the Kuwaiti algorithm.

Importante

Per impostazione predefinita, SQL ServerSQL Server interpreta anni a due cifre in base a un anno di cambio data pari a 2049,By default, SQL ServerSQL Server interprets two-digit years based on a cutoff year of 2049. Ciò significa che SQL ServerSQL Server interpreta l'anno a due cifre 49 come 2049 e l'anno a due cifre 50 come 1950.That means that SQL ServerSQL Server interprets the two-digit year 49 as 2049 and the two-digit year 50 as 1950. Numerose applicazioni client, incluse quelle basate su oggetti di automazione, usano il 2030 come anno di cambio data.Many client applications, including those based on Automation objects, use a cutoff year of 2030. SQL ServerSQL Server specifica l'opzione di configurazione del cambio data per anno a due cifre per modificare l'anno di cambio data usato da SQL ServerSQL Server.provides the two digit year cutoff configuration option to change the cutoff year used by SQL ServerSQL Server. Ciò consente una gestione coerente delle date.This allows for the consistent treatment of dates. È consigliabile specificare l'anno nel formato a quattro cifre.We recommend specifying four-digit years.

6 Supportato solo per il cast di dati dal tipo carattere al tipo di dati datetime o smalldatetime.6 Only supported when casting from character data to datetime or smalldatetime. Quando si esegue il cast dei dati di tipo carattere che rappresentano solo componenti di data o di ora al tipo di dati datetime o smalldatetime, il componente di ora non specificato viene impostato su 00:00:00.000 e il componente di data non specificato viene impostato su 01-01-1900.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 Usare l'indicatore di fuso orario facoltativo Z per semplificare il mapping tra i valori datetime XML con informazioni sul fuso orario e i valori datetime di SQL ServerSQL Server senza fuso orario.7 Use 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 indica il fuso orario UTC-0.Z indicates time zone UTC-0. Il valore di offset HH:MM nella direzione + o - indica altri fusi orari.The HH:MM offset, in the + or - direction, indicates other time zones. Ad esempio: 2006-12-12T23:45:12-08:00.For example: 2006-12-12T23:45:12-08:00.

Quando si convertono dati di tipo smalldatetime in dati di tipo carattere, gli stili che includono secondi o millisecondi visualizzano una serie di zeri.When converting smalldatetime to character data, the styles that include seconds or milliseconds show zeros in these positions. Quando si esegue la conversione da valori datetime o smalldatetime, usare la lunghezza appropriata per il tipo di dati char o varchar per troncare le parti della data superflue.When converting from datetime or smalldatetime values, use an appropriate char or varchar data type length to truncate unwanted date parts.

Quando si esegue la conversione di dati di tipo carattere in datetimeoffset usando uno stile che include un'ora, al risultato viene aggiunta una differenza di fuso orario.When converting character data to datetimeoffset, using a style that includes a time, a time zone offset is appended to the result.

Stili float e realfloat and real styles

Se il tipo di dati di expression è float o real, style può avere uno dei valori indicati nella tabella seguente.For a float or real expression, style can have one of the values shown in the following table. Gli altri valori vengono elaborati come 0.Other values are processed as 0.

valoreValue OutputOutput
0 (predefinito)0 (default) Al massimo 6 cifre.A maximum of 6 digits. Usare questo valore nella notazione scientifica, quando è appropriato.Use in scientific notation, when appropriate.
11 Sempre 8 cifre.Always 8 digits. Usare questo valore nella notazione scientifica.Always use in scientific notation.
22 Sempre 16 cifre.Always 16 digits. Usare questo valore nella notazione scientifica.Always use in scientific notation.
33 Sempre 17 cifre.Always 17 digits. Usare per la conversione senza perdita di dati.Use for lossless conversion. Con questo stile, è garantita la conversione di ogni float Distinct in una stringa di caratteri Distinct.With this style, every distinct float or real value is guaranteed to convert to a distinct character string.

Si applica a: SQL ServerSQL Server (a partire da SQL Server 2016 (13.x)SQL Server 2016 (13.x)) e Database SQL di AzureAzure SQL Database.Applies to: SQL ServerSQL Server (Starting in SQL Server 2016 (13.x)SQL Server 2016 (13.x)) and Database SQL di AzureAzure SQL Database.
126, 128, 129126, 128, 129 Incluso per motivi di compatibilità con le versioni precedenti. Questi valori potrebbero essere deprecati in una versione futura.Included for legacy reasons; a future release could deprecate these values.

Stili money e smallmoneymoney and smallmoney styles

Se il tipo di dati di expression è money o smallmoney, style può avere uno dei valori indicati nella tabella seguente.For a money or smallmoney expression, style can have one of the values shown in the following table. Gli altri valori vengono elaborati come 0.Other values are processed as 0.

valoreValue OutputOutput
0 (predefinito)0 (default) Nessun separatore delle migliaia a sinistra del separatore decimale e due cifre a destra del separatore decimaleNo commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Esempio: 4235.98.Example: 4235.98.
11 Separatore delle migliaia tre cifre a sinistra del separatore decimale e due cifre a destra del separatore decimaleCommas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Esempio: 3,510.92.Example: 3,510.92.
22 Nessun separatore delle migliaia a sinistra del separatore decimale e quattro cifre a destra del separatore decimaleNo commas every three digits to the left of the decimal point, and four digits to the right of the decimal point

Esempio: 4235.9819.Example: 4235.9819.
126126 Equivalente allo stile 2 in caso di conversione in char(n) o varchar(n)Equivalent to style 2, when converting to char(n) or varchar(n)

Stili xmlxml styles

Se il tipo di dati di expression è xml, style può avere uno dei valori indicati nella tabella seguente.For an xml expression, style can have one of the values shown in the following table. Gli altri valori vengono elaborati come 0.Other values are processed as 0.

valoreValue OutputOutput
0 (predefinito)0 (default) Viene usato il comportamento di analisi predefinito, ovvero vengono eliminati gli spazi vuoti non significativi e non vengono consentiti subset DTD interni.Use default parsing behavior that discards insignificant white space, and does not allow for an internal DTD subset.

Nota: quando si esegue la conversione nel tipo di dati xml, gli spazi vuoti non significativi di SQL ServerSQL Server vengono gestiti diversamente rispetto a 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. Per altre informazioni, vedere Creare istanze di dati XML.For more information, see Create Instances of XML Data.
11 Mantiene gli spazi vuoti non significativi.Preserve insignificant white space. Con questa impostazione dello stile, il comportamento predefinito di xml:space è equivalente a xml:space="preserve" .This style setting sets the default xml:space handling to match the behavior of xml:space="preserve".
22 Abilita l'elaborazione limitata di subset DTD interni.Enable limited internal DTD subset processing.

Se abilitata, il server può usare le informazioni seguenti disponibili in un subset DTD intero per eseguire operazioni di analisi senza convalida.If enabled, the server can use the following information that is provided in an internal DTD subset, to perform nonvalidating parse operations.

- Vengono applicati i valori predefiniti per gli attributi- Defaults for attributes are applied
- I riferimenti alle entità interne vengono risolti ed espansi- Internal entity references are resolved and expanded
- Viene controllata la correttezza della sintassi del modello di contenuti DTD- The DTD content model is checked for syntactical correctness

Il parser ignora i subset DTD esterni.The parser ignores external DTD subsets. Inoltre, non valuta la dichiarazione XML per verificare se l'attributo standalone ha un valore yes o no.Also, it does not evaluate the XML declaration to see whether the standalone attribute has a yes or no value. Analizza invece l'istanza XML come documento autonomo.Instead, it parses the XML instance as a stand-alone document.
33 Mantiene gli spazi non significativi e consente l'elaborazione limitata di subset DTD interni.Preserve insignificant white space, and enable limited internal DTD subset processing.

Stili binaryBinary styles

Se il tipo di dati di expression è binary(n) , char(n) , varbinary(n) o varchar(n) , style può avere uno dei valori indicati nella tabella seguente.For a binary(n), char(n), varbinary(n), or varchar(n) expression, style can have one of the values shown in the following table. I valori dello stile non indicati nella tabella restituiscono un errore.Style values not listed in the table will return an error.

valoreValue OutputOutput
0 (predefinito)0 (default) Converte caratteri ASCII in byte binari e viceversa.Translates ASCII characters to binary bytes, or binary bytes to ASCII characters. Ogni carattere o byte viene convertito in base allo schema 1:1.Each character or byte is converted 1:1.

Se data-type è binario, a sinistra del risultato vengono aggiunti i caratteri 0x.For a binary data_type, the characters 0x are added to the left of the result.
1, 21, 2 Se data_tye è binario, l'espressione deve essere un'espressione di caratteri.For a binary data_type, the expression must be a character expression. expression deve includere un numero pari di cifre esadecimali (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). Se style è impostato su 1, i primi due caratteri devono essere 0x.If the style is set to 1, the must have 0x as the first two characters. Se l'espressione contiene un numero di caratteri dispari o se un carattere qualsiasi non è valido, viene generato un errore.If the expression contains an odd number of characters, or if any of the characters is invalid, an error is raised.

Se la lunghezza dell'espressione convertita supera la lunghezza di data_type, il risultato viene troncato a destra.If the length of the converted expression exceeds the length of the data_type, the result is right truncated.

A data_type a lunghezza fissa maggiori del risultato convertito vengono aggiunti zeri a destra del risultato.Fixed length data_types larger than the converted result have zeros added to the right of the result.

Un data_type di tipo carattere richiede un'espressione binaria.A data_type of type character requires a binary expression. Ogni carattere binario viene convertito in due caratteri esadecimali.Each binary character is converted into two hexadecimal characters. Se la lunghezza dell'espressione convertita supera la lunghezza di data_type, il risultato viene troncato a destra.If the length of the converted expression exceeds the length of the data_type, it will be right truncated.

Se data_type è un tipo di carattere di dimensioni fisse e la lunghezza del risultato convertito è inferiore a quella di data_type, a destra dell'espressione convertita vengono aggiunti spazi per mantenere un numero pari di cifre esadecimali.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.

Se style è uguale a 1, a sinistra del risultato convertito verranno aggiunti i caratteri 0x.The characters 0x will be added to the left of the converted result for style 1.

Conversioni impliciteImplicit conversions

Per le conversioni implicite non è necessario specificare la funzione CAST o la funzione CONVERT.Implicit conversions do not require specification of either the CAST function or the CONVERT function. Per le conversioni esplicite è necessario specificare la funzione CAST o la funzione CONVERT.Explicit conversions require specification of the CAST function or the CONVERT function. Nella figura seguente vengono illustrate le conversioni di tipi di dati esplicite e implicite consentite per i tipi di dati di sistema di SQL ServerSQL Server.The following illustration shows all explicit and implicit data type conversions allowed for SQL ServerSQL Server system-supplied data types. Questi includono bigint, sql_variant e xml.These include bigint, and sql_variant, and xml. Non è possibile eseguire una conversione implicita in un'assegnazione dal tipo di dati sql_variant, ma è possibile eseguire una conversione implicita verso il tipo di dati sql_variant.There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.

Suggerimento

Questo grafico è disponibile nell'Area download Microsoft come file PDF scaricabile.The Microsoft Download Center has this chart available for download as a PDF file.

Tabella di conversione dei tipi di datiData type conversion table

Il grafico sopra riportato illustra tutte le conversioni esplicite e implicite consentite in SQL ServerSQL Server, ma il tipo di dati risultante della conversione dipende dall'operazione eseguita:The above chart illustrates all the explicit and implicit conversions that are allowed in SQL ServerSQL Server, but the resulting data type of the conversion depends on the operation being performed:

  • Per le conversioni esplicite, l'istruzione stessa determina il tipo di dati risultante.For explicit conversions, the statement itself determines the resulting data type.
  • Per le conversioni implicite, le istruzioni di assegnazione, ad esempio l'impostazione del valore di una variabile o l'inserimento di un valore in una colonna, hanno come risultato il tipo di dati definito dalla dichiarazione di variabile o dalla definizione di colonna.For implicit conversions, assignment statements such as setting the value of a variable or inserting a value into a column will result in the data type that was defined by the variable declaration or column definition.
  • Per gli operatori di confronto o altre espressioni, il tipo di dati risultante dipenderà dalle regole di precedenza dei tipi di dati.For comparison operators or other expressions, the resulting data type will depend on the rules of data type precedence.

Suggerimento

Un esempio pratico degli effetti della precedenza dei tipi di dati nelle conversioni è disponibile più avanti in questa sezione.A practical example on the effects of data type precedence in conversions can be seen later in this section.

Quando si esegue la conversione tra datetimeoffset e i tipi di dati di carattere char, nchar, nvarchar e varchar, la parte relativa alla differenza di fuso orario convertita deve essere sempre costituita da cifre doppie sia per HH che per 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. Ad esempio, -08:00.For example, -08:00.

Nota

Poiché i dati Unicode usano sempre un numero pari di byte, prestare attenzione nella conversione tra dati di tipo binary o varbinary e tipi di dati supportati da 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. La conversione seguente, ad esempio, non restituisce il valore esadecimale 41.For example, the following conversion does not return a hexadecimal value of 41. Restituisce un valore esadecimale di 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).It returns a hexadecimal value of 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary). Per altre informazioni, vedere Collation and Unicode Support.For more information, see Collation and Unicode Support.

Tipi di dati per valori di grandi dimensioniLarge-value data types

Per quanto riguarda le conversioni implicite ed esplicite, i tipi di dati per valori di grandi dimensioni si comportano come i tipi di dati per valori di dimensioni minori, in particolare i tipi di dati nvarchar, varbinary e 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. Considerare tuttavia queste indicazioni:However, consider the following guidelines:

  • La conversione di image in varbinary(max) e viceversa funziona come conversione implicita, come le conversioni tra text e varchar(max) e ntext e 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 conversione di tipi di dati per valori di grandi dimensioni, ad esempio varchar(max) , in tipi di dati per valori di dimensioni minori, ad esempio varchar, è una conversione implicita, ma si verifica un troncamento se la dimensione del valore più grande supera la lunghezza specificata per il tipo di dati più piccolo.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.
  • La conversione di varchar, nvarchar o varbinary nei corrispondenti tipi di dati per valori di grandi dimensioni avviene in modo implicito.Conversion from nvarchar, varbinary, or varchar to their corresponding large-value data types happens implicitly.
  • La conversione del tipo di dati sql_variant in tipi di dati per valori di grandi dimensioni è una conversione esplicita.Conversion from the sql_variant data type to the large-value data types is an explicit conversion.
  • Non è possibile convertire i tipi di dati per valori di grandi dimensioni nel tipo di dati sql_variant.Large-value data types cannot be converted to the sql_variant data type.

Per altre informazioni sulla conversione del tipo di dati xml, vedere Creare istanze di dati XML.For more information about conversion from the xml data type, see Create Instances of XML Data.

Tipo di dati XML.xml data type

Quando si esegue il cast esplicito o implicito del tipo di dati xml a un tipo string o binary, il contenuto del tipo di dati xml viene serializzato in base a un set di regole.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. Per informazioni su queste regole, vedere Definire la serializzazione di dati XML.For information about these rules, see Define the Serialization of XML Data. Per informazioni sulla conversione di altri tipi di dati nel tipo di dati xml, vedere Creare istanze di dati XML.For information about conversion from other data types to the xml data type, see Create Instances of XML Data.

Tipi di dati text e imagetext and image data types

I tipi di dati text e image non supportano la conversione automatica del tipo di dati.The text and image data types do not support automatic data type conversion. È possibile convertire in modo esplicito dati di tipo text in dati di tipo carattere e dati di tipo image in dati di tipo binary o varbinary, ma la lunghezza massima è di 8000 byte.You can explicitly convert text data to character data, and image data to binary or varbinary, but the maximum length is 8000 bytes. Se si tenta di eseguire una conversione non corretta, ad esempio convertire un'espressione di tipo carattere contenente lettere in un tipo int, SQL ServerSQL Server restituisce un messaggio di errore.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.

Regole di confronto per l'outputOutput Collation

Quando l'output delle funzioni CAST o CONVERT è una stringa di caratteri e le funzioni ricevono come input una stringa di caratteri, l'output e l'input hanno le stesse regole di confronto e le stesse etichette delle regole di confronto.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. Se l'input non è una stringa di caratteri, all'output sono associate le regole di confronto predefinite del database e un'etichetta delle regole di confronto a cui possono essere assegnati valori predefiniti.If the input is not a character string, the output has the default collation of the database, and a collation label of coercible-default. Per altre informazioni, vedere Precedenza delle regole di confronto (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

Per assegnare all'output regole di confronto diverse, applicare la clausola COLLATE all'espressione risultante della funzione CAST o CONVERT.To assign a different collation to the output, apply the COLLATE clause to the result expression of the CAST or CONVERT function. Esempio:For example:

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

Troncamento e arrotondamento dei risultatiTruncating and rounding results

Durante la conversione di espressioni di caratteri o binarie (binary, char, nchar, nvarchar, varbinary o varchar) in un'espressione con tipo di dati differente, l'operazione di conversione può troncare i dati di output, visualizzare solo parzialmente i dati di output o restituire un errore.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. Queste situazioni si verificano se il risultato è troppo breve per essere visualizzato.These cases will occur if the result is too short to display. Le conversioni in dati di tipo binary, char, nchar, nvarchar, varbinary o varchar vengono troncate, ad eccezione delle conversioni riportate nella tabella seguente.Conversions to binary, char, nchar, nvarchar, varbinary, or varchar are truncated, except for the conversions shown in the following table.

Tipo di dati di origineFrom data type Tipo di dati di destinazioneTo data type RisultatoResult
int, smallint o tinyintint, smallint, or tinyint charchar *
varcharvarchar *
ncharnchar EE
nvarcharnvarchar EE
money, smallmoney, numeric, decimal, float o realmoney, smallmoney, numeric, decimal, float, or real charchar EE
varcharvarchar EE
ncharnchar EE
nvarcharnvarchar EE

* = Risultato di lunghezza insufficiente per essere visualizzato* = Result length too short to display

E = Viene restituito un errore perché la lunghezza del risultato è insufficiente per la visualizzazione.E = Error returned because result length is too short to display.

In SQL ServerSQL Server la restituzione degli stessi valori in versioni diverse è garantita solo per le conversioni rount trip, ovvero le conversioni in cui un tipo di dati viene convertito in un altro tipo di dati e quindi riconvertito nel tipo di dati iniziale.SQL ServerSQL Server 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. Nell'esempio seguente viene illustrata una conversione di questo tipo: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));  

Avviso

Evitare di costruire valori di tipo binary e di convertirli in un tipo di dati della categoria dei tipi numerici.Do not construct binary values, and then convert them to a data type of the numeric data type category. SQL ServerSQL Server non garantisce che il risultato della conversione di un tipo di dati decimal o numeric nel tipo binary sia uguale in versioni diverse di 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.

Nell'esempio seguente viene illustrata un'espressione troppo breve per essere visualizzata.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;  

Set di risultati: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)  

Quando si convertono tipi di dati con un numero di cifre decimali diverso, in alcuni casi SQL ServerSQL Server restituisce un valore troncato e in altri restituisce un valore arrotondato.When you convert data types that differ in decimal places, SQL ServerSQL Server will sometimes return a truncated result value, and at other times it will return a rounded value. La tabella che segue illustra questo comportamento.This table shows the behavior.

FromFrom PerTo ComportamentoBehavior
numericnumeric numericnumeric ArrotondamentoRound
numericnumeric intint TroncamentoTruncate
numericnumeric moneymoney ArrotondamentoRound
moneymoney intint ArrotondamentoRound
moneymoney numericnumeric ArrotondamentoRound
floatfloat intint TroncamentoTruncate
floatfloat numericnumeric ArrotondamentoRound

La conversione dei valori float che usano come notazione scientifica decimal o numeric è limitata ai soli valori con precisione a 17 cifre.Conversion of float values that use scientific notation to decimal or numeric is restricted to values of precision 17 digits only. Tutti i valori con precisione maggiore di 17 vengono arrotondati a zero.Any value with precision higher than 17 rounds to zero.
floatfloat datetimedatetime ArrotondamentoRound
datetimedatetime intint ArrotondamentoRound

Ad esempio, i valori 10.6496 e -10.6496 potrebbero essere troncati o arrotondati durante la conversione nei tipi int o 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;

I risultati della query sono riportati nella tabella seguente:Results of the query are shown in the following table:

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

Se si esegue una conversione di tipi di dati in cui il tipo di destinazione ha un numero di decimali inferiore rispetto al tipo di origine, il valore viene arrotondato.When converting data types where the target data type has fewer decimal places than the source data type, the value is rounded. Ad esempio, questa conversione restituisce $10.3497:For example, this conversion returns $10.3497:

SELECT CAST(10.3496847 AS money);

SQL ServerSQL Server restituisce un messaggio di errore quando si convertono dati char, nchar, varchar o nvarchar non numerici in int, float, numeric o decimal.returns an error message when converting nonnumeric char, nchar, nvarchar, or varchar data to decimal, float, int, numeric. SQL ServerSQL Server restituisce un errore anche quando una stringa vuota (" ") viene convertita in numeric o decimal.also returns an error when an empty string (" ") is converted to numeric or decimal.

Alcune conversioni di data/ora sono non deterministicheCertain datetime conversions are nondeterministic

Nella tabella seguente vengono elencati gli stili per i quali la conversione da stringa al tipo datetime è di tipo non deterministico.The following table lists the styles for which the string-to-datetime conversion is nondeterministic.

Tutti gli stili inferiori a 1001All styles below 1001 106106
107107 109109
113113 130130

1 Ad eccezione degli stili 20 e 211 With the exception of styles 20 and 21

Per altre informazioni, vedere Conversione non deterministica di stringhe di valori letterali in valori DATE.For more information, see Nondeterministic conversion of literal date strings into DATE values.

Caratteri supplementari (coppie di surrogati)Supplementary characters (surrogate pairs)

A partire da SQL Server 2012 (11.x)SQL Server 2012 (11.x), quando si usano le regole di confronto per caratteri supplementari (SC), un'operazione CAST da nchar o nvarchar a un tipo nchar o nvarchar di lunghezza minore non verrà troncato in una coppia di surrogati.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. Verrà invece troncato prima del carattere supplementare.Instead, the operation truncates before the supplementary character. Ad esempio, nel frammento di codice seguente @x mantiene solo 'ab'.For example, the following code fragment leaves @x holding just 'ab'. Lo spazio non è sufficiente per mantenere il carattere supplementare.There is not enough space to hold the supplementary character.

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

Quando si usano le regole di confronto SC, il comportamento di CONVERT è analogo a quello di CAST.When using SC collations, the behavior of CONVERT, is analogous to that of CAST. Per altre informazioni, vedere Regole di confronto e supporto Unicode - Caratteri supplementari.For more information, see Collation and Unicode Support - Supplementary Characters.

Informazioni sulla compatibilitàCompatibility support

Nelle versioni precedenti di SQL ServerSQL Server lo stile predefinito per le operazioni CAST e CONVERT nei tipi di dati time e datetime2 è 121, tranne quando uno dei due tipi viene usato in un'espressione di colonna calcolata.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. Per le colonne calcolate, lo stile predefinito è 0.For computed columns, the default style is 0. Questo comportamento influisce sulle colonne calcolate quando vengono create o usate nelle query con parametrizzazione automatica o nelle definizioni dei vincoli.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

Con il livello di compatibilità 110 e superiore, lo stile predefinito per le operazioni CAST e CONVERT sui tipi di dati time e datetime2 è sempre 121.Under compatibility level 110 and higher, the CAST and CONVERT operations on the time and datetime2 data types always have 121 as the default style. Se una query si basa sul comportamento obsoleto, usare un livello di compatibilità inferiore a 110 oppure specificare in modo esplicito lo stile 0 nella query interessata.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.

Valore di Livello di compatibilitàCompatibility level value Stile predefinito per CAST e CONVERT1Default style for CAST and CONVERT1 Stile predefinito per la colonna calcolataDefault style for computed column
< 110< 110 121121 00
> = 110> = 110 121121 121121

1 Ad eccezione delle colonne calcolate1 Except for computed columns

L'aggiornamento del database al livello di compatibilità 110 e superiore non comporta la modifica dei dati utente archiviati su disco.Upgrading the database to compatibility level 110 and higher will not change user data that has been stored to disk. È necessario correggere manualmente questi dati nel modo opportuno.You must manually correct this data as appropriate. Se ad esempio si usa SELECT INTO per creare una tabella da un'origine che contiene un'espressione di colonna calcolata descritta in precedenza, vengono archiviati i dati (con stile 0), non la definizione della colonna calcolata.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. Sarà necessario aggiornare manualmente questi dati in base allo stile 121.You must manually update this data to match style 121.

EsempiExamples

A.A. Utilizzo delle funzioni CAST e CONVERTUsing both CAST and CONVERT

In questi esempi vengono recuperati i nomi dei prodotti il cui prezzo contiene un 3 come prima cifra e i relativi valori di ListPrice vengono convertiti nel tipo 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 '33%';  
GO  
  
-- Use CONVERT.  
USE AdventureWorks2012;  
GO  
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice  
FROM Production.Product  
WHERE CONVERT(int, ListPrice) LIKE '33%';  
GO  

Set di risultati:Here is the result set. Il set di risultati di esempio è lo stesso per CAST e CONVERT.The sample result set is the same for both CAST and CONVERT.

ProductName                    ListPrice
------------------------------ ---------------------
LL Road Frame - Black, 58      337.22
LL Road Frame - Black, 60      337.22
LL Road Frame - Black, 62      337.22
LL Road Frame - Red, 44        337.22
LL Road Frame - Red, 48        337.22
LL Road Frame - Red, 52        337.22
LL Road Frame - Red, 58        337.22
LL Road Frame - Red, 60        337.22
LL Road Frame - Red, 62        337.22
LL Road Frame - Black, 44      337.22
LL Road Frame - Black, 48      337.22
LL Road Frame - Black, 52      337.22
Mountain-100 Black, 38         3374.99
Mountain-100 Black, 42         3374.99
Mountain-100 Black, 44         3374.99
Mountain-100 Black, 48         3374.99
HL Road Front Wheel            330.06
LL Touring Frame - Yellow, 62  333.42
LL Touring Frame - Blue, 50    333.42
LL Touring Frame - Blue, 54    333.42
LL Touring Frame - Blue, 58    333.42
LL Touring Frame - Blue, 62    333.42
LL Touring Frame - Yellow, 44  333.42
LL Touring Frame - Yellow, 50  333.42
LL Touring Frame - Yellow, 54  333.42
LL Touring Frame - Yellow, 58  333.42
LL Touring Frame - Blue, 44    333.42
HL Road Tire                   32.60

(28 rows affected)

B.B. Utilizzo della funzione CAST con operatori aritmeticiUsing CAST with arithmetic operators

In questo esempio viene eseguito il calcolo di una sola colonna (Computed) dividendo il totale delle vendite dell'anno in corso (SalesYTD) per la percentuale di commissione (CommissionPCT).This example calculates a single column computation (Computed) by dividing the total year-to-date sales (SalesYTD) by the commission percentage (CommissionPCT). Questo valore viene arrotondato al numero intero più vicino e viene quindi eseguito il CAST del valore a un tipo di dati 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  

Set di risultati: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. Utilizzo della funzione CAST per la concatenazioneUsing CAST to concatenate

In questo esempio vengono concatenate espressioni non di tipo carattere usando CAST.This example concatenates noncharacter expressions by using CAST. Viene usato il database 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;  

Set di risultati: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. Utilizzo di CAST per migliorare la leggibilità del testoUsing CAST to produce more readable text

Questo esempio usa CAST nell'elenco SELECT per convertire la colonna Name in una colonna char(10) .This example uses CAST in the SELECT list, to convert the Name column to a char(10) column. Viene usato il database 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';  

Set di risultati:Here is the result set.

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

E.E. Utilizzo di CAST con la clausola LIKEUsing CAST with the LIKE clause

Questo esempio converte nella colonna money i valori SalesYTD nel tipo di dati inte quindi nel tipo di datichar(20), in modo che possano essere usati dalla clausola LIKE.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  

Set di risultati: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. Utilizzo di CONVERT o CAST con XML tipizzatoUsing CONVERT or CAST with typed XML

Questi esempi spiegano come usare CONVERT per convertire i dati in XML tipizzato usando Colonne e tipo di dati 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).

In questo esempio una stringa con spazi vuoti, testo e markup viene convertita in XML tipizzato e vengono rimossi tutti gli spazi non significativi (spazi vuoti limite tra i nodi):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>')  

In questo esempio una stringa simile con spazi vuoti, testo e markup viene convertita in XML tipizzato e vengono mantenuti gli spazi vuoti non significativi (spazi vuoti limite tra i nodi):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)  

In questo esempio viene eseguito il cast di una stringa con spazi vuoti, testo e markup in XML tipizzato: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)  

Per altri esempi, vedere Creare istanze di dati XML.See Create Instances of XML Data for more examples.

G.G. Utilizzo di CAST e CONVERT con dati datetimeUsing CAST and CONVERT with datetime data

Iniziando con i valori GETDATE(), questo esempio visualizza la data e l'ora correnti, usa CAST per modificarle in dati di tipo carattere e quindi usa CONVERT per visualizzare data e ora nel formato 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  

Set di risultati: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)  

Questo esempio rappresenta all'incirca l'opposto dell'esempio precedente.This example is approximately the opposite of the previous example. Nell'esempio vengono visualizzate una data e un'ora come dati di tipo carattere, viene usato CAST per modificare i dati di tipo carattere nel tipo di dati datetime e quindi viene usato CONVERT per modificare i dati nel tipo di dati 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  

Set di risultati: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. Utilizzo di CONVERT con dati binari e di tipo carattereUsing CONVERT with binary and character data

In questi esempi vengono illustrati i risultati della conversione di dati binari e di tipo carattere utilizzando stili diversi.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];  

Set di risultati:Here is the result set.

Style 0, binary to character
----------------------------
Name  

(1 row(s) affected)  

Questo esempio indica che Style 1 è in grado di forzare il troncamento del risultato.This example shows that Style 1 can force result truncation. I caratteri 0x nel set di risultati forzano il troncamento.The characters 0x in the result set force the truncation.

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

Set di risultati:Here is the result set.

Style 1, binary to character
------------------------------
0x4E616D

(1 row(s) affected)  

L'esempio seguente indica che Style 2 non tronca il risultato perché i caratteri 0x non sono inclusi nel risultato.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];  

Set di risultati:Here is the result set.

Style 2, binary to character
------------------------------
4E616D65

(1 row(s) affected)  

Convertire il valore di carattere 'Name' in valore binario.Convert the character value 'Name' to a binary value.

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

Set di risultati: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];  

Set di risultati: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];  

Set di risultati:Here is the result set.

Style 2, character to binary  
----------------------------------  
0x4E616D65

(1 row(s) affected)  

I.I. Conversione dei tipi di dati date e timeConverting date and time data types

Questo esempio illustra la conversione dei tipi di dati date, time e 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];  

J.J. Uso di CONVERT con dati datetime in formati diversiUsing CONVERT with datetime data in different formats

A partire da valori GETDATE(), questo esempio usa CONVERT per visualizzare tutti gli stili di data e ora nella sezione Stili di data e ora di questo articolo.Starting with GETDATE() values, this example uses CONVERT to display of all the date and time styles in section Date and Time styles of this article.

N. di formatoFormat # Query di esempioExample query Risultato di esempioSample result
00 SELECT CONVERT(nvarchar, GETDATE(), 0) 23 ago 2019 1:39PMAug 23 2019 1:39PM
11 SELECT CONVERT(nvarchar, GETDATE(), 1) 08/23/1908/23/19
22 SELECT CONVERT(nvarchar, GETDATE(), 2) 19.08.2319.08.23
33 SELECT CONVERT(nvarchar, GETDATE(), 3) 23/08/1923/08/19
44 SELECT CONVERT(nvarchar, GETDATE(), 4) 23.08.1923.08.19
55 SELECT CONVERT(nvarchar, GETDATE(), 5) 23-08-1923-08-19
66 SELECT CONVERT(nvarchar, GETDATE(), 6) 23 ago 1923 Aug 19
77 SELECT CONVERT(nvarchar, GETDATE(), 7) Ago 23, 19Aug 23, 19
8 o 24 o 1088 or 24 or 108 SELECT CONVERT(nvarchar, GETDATE(), 8) 13:39:1713:39:17
9 o 1099 or 109 SELECT CONVERT(nvarchar, GETDATE(), 9) Ago 23 2019 1:39:17:090PMAug 23 2019 1:39:17:090PM
1010 SELECT CONVERT(nvarchar, GETDATE(), 10) 08-23-1908-23-19
1111 SELECT CONVERT(nvarchar, GETDATE(), 11) 19/08/2319/08/23
1212 SELECT CONVERT(nvarchar, GETDATE(), 12) 190823190823
13 o 11313 or 113 SELECT CONVERT(nvarchar, GETDATE(), 13) 23 ago 2019 13:39:17:09023 Aug 2019 13:39:17:090
14 o 11414 or 114 SELECT CONVERT(nvarchar, GETDATE(), 14) 13:39:17:09013:39:17:090
20 o 12020 or 120 SELECT CONVERT(nvarchar, GETDATE(), 20) 2019-08-23 13:39:172019-08-23 13:39:17
21 o 25 o 12121 or 25 or 121 SELECT CONVERT(nvarchar, GETDATE(), 21) 2019-08-23 13:39:17.0902019-08-23 13:39:17.090
2222 SELECT CONVERT(nvarchar, GETDATE(), 22) 08/23/19 1:39:17 PM08/23/19 1:39:17 PM
2323 SELECT CONVERT(nvarchar, GETDATE(), 23) 2019-08-232019-08-23
101101 SELECT CONVERT(nvarchar, GETDATE(), 101) 08/23/201908/23/2019
102102 SELECT CONVERT(nvarchar, GETDATE(), 102) 2019.08.232019.08.23
103103 SELECT CONVERT(nvarchar, GETDATE(), 103) 23/08/201923/08/2019
104104 SELECT CONVERT(nvarchar, GETDATE(), 104) 23.08.201923.08.2019
105105 SELECT CONVERT(nvarchar, GETDATE(), 105) 23-08-201923-08-2019
106106 SELECT CONVERT(nvarchar, GETDATE(), 106) 23 ago 201923 Aug 2019
107107 SELECT CONVERT(nvarchar, GETDATE(), 107) Ago 23, 2019Aug 23, 2019
110110 SELECT CONVERT(nvarchar, GETDATE(), 110) 08-23-201908-23-2019
111111 SELECT CONVERT(nvarchar, GETDATE(), 111) 2019/08/232019/08/23
112112 SELECT CONVERT(nvarchar, GETDATE(), 112) 2019082320190823
113113 SELECT CONVERT(nvarchar, GETDATE(), 113) 23 ago 2019 13:39:17.09023 Aug 2019 13:39:17.090
120120 SELECT CONVERT(nvarchar, GETDATE(), 120) 2019-08-23 13:39:172019-08-23 13:39:17
121121 SELECT CONVERT(nvarchar, GETDATE(), 121) 2019-08-23 13:39:17.0902019-08-23 13:39:17.090
126126 SELECT CONVERT(nvarchar, GETDATE(), 126) 2019-08-23T13:39:17.0902019-08-23T13:39:17.090
127127 SELECT CONVERT(nvarchar, GETDATE(), 127) 2019-08-23T13:39:17.0902019-08-23T13:39:17.090
130130 SELECT CONVERT(nvarchar, GETDATE(), 130) 22 ذو الحجة 1440 1:39:17.090P22 ذو الحجة 1440 1:39:17.090P
131131 SELECT CONVERT(nvarchar, GETDATE(), 131) 22/12/1440 1:39:17.090PM22/12/1440 1:39:17.090PM

K.K. Effetti della precedenza dei tipi di dati nelle conversioni consentiteEffects of data type precedence in allowed conversions

L'esempio seguente definisce una variabile di tipo VARCHAR, assegna un valore integer alla variabile e quindi seleziona una concatenazione della variabile con una stringa.The following example defines a variable of type VARCHAR, assigns an integer value to the variable, then selects a concatenation of the variable with a string.

DECLARE @string varchar(10);
SET @string = 1;
SELECT @string + ' is a string.' AS Result

Set di risultati:Here is the result set.

Result
-----------------------
1 is a string.

Il valore int di 1 è stato convertito in VARCHAR.The int value of 1 was converted to a VARCHAR.

In questo esempio viene illustrata una query simile, usando invece una variabile int:This example shows a similar query, using an int variable instead:

DECLARE @notastring int;
SET @notastring = '1';
SELECT @notastring + ' is not a string.' AS Result

In questo caso, l'istruzione SELECT genererà l'errore seguente:In this case, the SELECT statement will throw the following error:

Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value ' is not a string.' to data type int.

Per valutare l'espressione @notastring + ' is not a string.', SQL ServerSQL Server deve seguire le regole di precedenza dei tipi di dati per completare la conversione implicita prima che il risultato dell'espressione possa essere calcolato.In order to evaluate the expression @notastring + ' is not a string.', SQL ServerSQL Server needs to follow the rules of data type precedence to complete the implicit conversion before the result of the expression can be calculated. Dato che int ha una precedenza maggiore di VARCHAR, SQL ServerSQL Server tenta di convertire la stringa in un intero e non riesce perché la stringa non può essere convertita in un intero.Because int has a higher precedence than VARCHAR, SQL ServerSQL Server attempts to convert the string to an integer and fails because this string cannot be converted to an integer.

Se si specifica una stringa che può essere convertita, l'istruzione ha esito positivo, come nell'esempio seguente:If we provide a string that can be converted, the statement will succeed, as seen in the following example:

DECLARE @notastring int;
SET @notastring = '1';
SELECT @notastring + '1'

In questo caso, la stringa '1' può essere convertita nel valore intero 1, quindi questa istruzione SELECT restituirà il valore 2.In this case, the string '1' can be converted to the integer value 1, so this SELECT statement will return the value 2. Quando i tipi di dati forniti sono integer, l'operatore + diventa operatore matematico di addizione, anziché una concatenazione di stringhe.When the data types provided are integers, the + operator becomes addition mathematical operator, rather than a string concatenation.

Esempi: Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

L.L. Uso di CAST e CONVERTUsing CAST and CONVERT

Questo esempio recupera il nome dei prodotti il cui prezzo contiene un 3 come prima cifra e converte il valore ListPrice di questi prodotti nel tipo int. Usa il database AdventureWorksDW2016.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 AdventureWorksDW2016 database.

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

Questo esempio illustra la stessa query in cui viene usato CONVERT anziché CAST.This example shows the same query, using CONVERT instead of CAST. Usa il database AdventureWorksDW2016.It uses the AdventureWorksDW2016 database.

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

M.M. Utilizzo della funzione CAST con operatori aritmeticiUsing CAST with arithmetic operators

Questo esempio calcola un unico valore di colonna dividendo il prezzo unitario del prodotto (UnitPrice) per la percentuale di sconto (UnitPriceDiscountPct).This example calculates a single column value by dividing the product unit price (UnitPrice) by the discount percentage (UnitPriceDiscountPct). Il risultato viene arrotondato al numero intero più prossimo e infine convertito in un tipo di dati int.This result is then rounded to the nearest whole number, and finally converted to an int data type. In questo esempio viene utilizzato il database AdventureWorksDW2016.This example uses the AdventureWorksDW2016 database.

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

Set di risultati: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  

N.N. Utilizzo di CAST con la clausola LIKEUsing CAST with the LIKE clause

Questo esempio converte nella colonna money il valore ListPrice in un tipo int e quindi in un tipo char(20) in modo che possa essere usato dalla clausola LIKE.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. In questo esempio viene utilizzato il database AdventureWorksDW2016.This example uses the AdventureWorksDW2016 database.

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

O.O. Utilizzo di CAST e CONVERT con dati datetimeUsing CAST and CONVERT with datetime data

Questo esempio visualizza la data e l'ora correnti, usa CAST per modificarle in dati di tipo carattere e quindi usa CONVERT per visualizzarle nel formato 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. In questo esempio viene utilizzato il database AdventureWorksDW2016.This example uses the AdventureWorksDW2016 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;  

Set di risultati: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  

Questo esempio rappresenta all'incirca l'opposto dell'esempio precedente.This example is the rough opposite of the previous example. L'esempio visualizza una data e un'ora come dati di tipo carattere, usa CAST per modificare i dati di tipo carattere nel tipo di dati datetime e quindi usa CONVERT per modificare i dati di tipo carattere nel tipo di dati 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. In questo esempio viene utilizzato il database AdventureWorksDW2016.This example uses the AdventureWorksDW2016 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;  

Set di risultati: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  

Vedere ancheSee also

Precedenza dei tipi di dati (Transact-SQL) Data type precedence (Transact-SQL)
Conversione di tipi di dati (motore di database) Data Type Conversion (Database Engine)
FORMAT (Transact-SQL) FORMAT (Transact-SQL)
STR (Transact-SQL) STR (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
Funzioni di sistema (Transact-SQL) System Functions (Transact-SQL)
Regole di confronto e supporto Unicode Collation and Unicode Support
Scrittura di istruzioni Transact-SQL internazionaliWrite International Transact-SQL Statements