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

DIESES THEMA GILT FÜR: JaSQL Server (ab 2008) JaAzure SQL-DatenbankJaAzure SQL Data Warehouse JaParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Mit diesen Funktionen wird ein Ausdruck von einem Datentyp in einen anderen konvertiert.These functions convert an expression of one data type to another.

Beispiel: Ändern des EingabedatentypsExample: Change the input datatype

UmwandelnCast

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

KonvertierenConvert


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

Im Folgenden finden Sie das Resultset.Here is the result set.

OriginalOriginal ssNoversionint Decimaldecimal
9.59.5 99 9.50009.5000

Weitere Informationen finden Sie in den Beispielen weiter unten in diesem Thema.See the examples later in this topic.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

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

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

ArgumenteArguments

expressionexpression
Beliebiger gültiger Ausdruck.Any valid expression.

data_typedata_type
Der Zieldatentyp.The target data type. Dazu gehören xml, bigint und sql_variant.This includes xml, bigint, and sql_variant. Aliasdatentypen können nicht verwendet werden.Alias data types cannot be used.

lengthlength
Eine optionale Ganzzahl, die die Länge des Zieldatentyps angibt.An optional integer that specifies the length of the target data type. Der Standardwert ist 30.The default value is 30.

stylestyle
Ein ganzzahliger Ausdruck, der angibt, wie die CONVERT-Funktion expression übersetzt.An integer expression that specifies how the CONVERT function will translate expression. Bei dem Formatwert NULL wird NULL zurückgegeben.For a style value of NULL, NULL is returned. data_type bestimmt den Bereich.data_type determines the range.

RückgabetypenReturn types

Gibt expression zurück, der in data_type übersetzt wurde.Returns expression, translated to data_type.

Datums- und UhrzeitformateDate and Time Styles

Bei dem Datums- oder Uhrzeitdatentyp expression kann style einer der in der folgenden Tabelle aufgelisteten Werte sein.For a date or time data type expression, style can have one of the values shown in the following table. Andere Werte werden als 0 verarbeitet.Other values are processed as 0. Ab SQL Server 2012 (11.x)SQL Server 2012 (11.x) sind die einzigen Formate, die bei der Konvertierung von Datums- und Uhrzeittypen in datetimeoffset unterstützt werden, 0 oder 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. Bei allen anderen Konvertierungsformaten wird der Fehler 9809 zurückgegeben.All other conversion styles return error 9809.

Hinweis

SQL ServerSQL Server unterstützt das Datumsformat im arabischem Format, indem der kuwaitische Algorithmus verwendet wird. supports the date format, in Arabic style, with the Kuwaiti algorithm.

Ohne Jahrhundert (jj) (1)Without century (yy) (1) Mit Jahrhundert (jjjj)With century (yyyy) StandardStandard Eingabe/Ausgabe (3)Input/Output (3)
- 0 oder 100 (1,2)0 or 100 (1,2) Standard für datetime und smalldatetimeDefault for datetime and smalldatetime mon tt jjjj hh:miAM (oder PM)mon dd yyyy hh:miAM (or PM)
11 101101 USAU.S. 1 = mm/tt/jj1 = mm/dd/yy
101 = mm/tt/jjjj101 = mm/dd/yyyy
22 102102 ANSIANSI 2 = jj.mm.tt2 = yy.mm.dd
102 = jjjj.mm.tt102 = yyyy.mm.dd
33 103103 Britisch/FranzösischBritish/French 3 = tt/mm/jj3 = dd/mm/yy
103 = tt/mm/jjjj103 = dd/mm/yyyy
44 104104 DeutschGerman 4 = tt.mm.jj4 = dd.mm.yy
104 = tt.mm.jjjj104 = dd.mm.yyyy
55 105105 ItalienischItalian 5 = tt-mm-jj5 = dd-mm-yy
105 = tt-mm-jjjj105 = dd-mm-yyyy
66 106 (1)106 (1) - 6 = tt mon jj6 = dd mon yy
106 = tt mon jjjj106 = dd mon yyyy
77 107 (1)107 (1) - 7 = Mon tt, jj7 = Mon dd, yy
107 = Mon tt, jjjj107 = Mon dd, yyyy
88 108108 - hh:mi:sshh:mi:ss
- 9 oder 109 (1,2)9 or 109 (1,2) Standardwert + MillisekundenDefault + milliseconds mon tt jjjj hh:mi:ss:mmmAM (oder PM)mon dd yyyy hh:mi:ss:mmmAM (or PM)
1010 110110 USAUSA 10 = mm-tt-jj10 = mm-dd-yy
110 = mm-tt-jjjj110 = mm-dd-yyyy
1111 111111 JAPANJAPAN 11 = jj/mm/tt11 = yy/mm/dd
111 = jjjj/mm/tt111 = yyyy/mm/dd
1212 112112 ISOISO 12 = jjmmtt12 = yymmdd
112 = jjjjmmtt112 = yyyymmdd
- 13 oder 113 (1,2)13 or 113 (1,2) Europ. Standard + MillisekundenEurope default + milliseconds tt mon jjjj 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 oder 120 (2)20 or 120 (2) ODBC kanonischODBC canonical jjjj-mm-tt hh:mi:ss(24h)yyyy-mm-dd hh:mi:ss(24h)
- 21 oder 121 (2)21 or 121 (2) ODBC kanonisch (mit Millisekunden) Standard für time, date, datetime2 und datetimeoffsetODBC canonical (with milliseconds) default for time, date, datetime2, and datetimeoffset jjjj-mm-tt hh:mi:ss.mmm(24h)yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126 (4)126 (4) ISO8601ISO8601 jjjj-mm-ttThh:mi:ss.mmm (keine Leerzeichen)yyyy-mm-ddThh:mi:ss.mmm (no spaces)

Hinweis: Bei einem Millisekundenwert (mmm) von 0, wird der Dezimalbruch des Millisekundenwerts nicht angezeigt.Note: For a milliseconds (mmm) value of 0, the millisecond decimal fraction value will not display. Beispielsweise wird der Wert „2012-11-07T18:26:20.000“ als „2012-11-07T18:26:20“ angezeigt.For example, the value '2012-11-07T18:26:20.000 displays as '2012-11-07T18:26:20'.
- 127(6, 7)127(6, 7) ISO8601 mit Zeitzone (Z).ISO8601 with time zone Z. jjjj-mm-ttThh:mi:ss.mmmZ (keine Leerzeichen)yyyy-mm-ddThh:mi:ss.mmmZ (no spaces)

Hinweis: Bei einem Millisekundenwert (mmm) von 0, wird der dezimale Millisekundenwert nicht angezeigt.Note: For a milliseconds (mmm) value of 0, the millisecond decimal value will not display. Beispielsweise wird der Wert „2012-11-07T18:26:20.000“ als „2012-11-07T18:26:20“ angezeigt.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) tt mon jjjj hh:mi:ss:mmmAMdd mon yyyy hh:mi:ss:mmmAM

In diesem Format entspricht mon dem vollständigen Monatsnamen in Form einer Hijri-Unicode-Darstellung mit mehreren Token.In this style, mon represents a multi-token Hijri unicode representation of the full month name. In einer standardmäßigen US-Installation von SSMS wird dieser Wert nicht ordnungsgemäß gerendert.This value does not render correctly on a default US installation of SSMS.
- 131 (2)131 (2) Hijri (5)Hijri (5) tt/mm/jjjj hh:mi:ss:mmmAMdd/mm/yyyy hh:mi:ss:mmmAM

1 Diese Formatwerte geben nicht deterministische Ergebnisse zurück.1 These style values return nondeterministic results. Dazu gehören alle (jj)-Formate (ohne Jahrhundert) und eine Teilmenge der (jjjj)-Formate (mit Jahrhundert).Includes all (yy) (without century) styles and a subset of (yyyy) (with century) styles.

2 Die Standardwerte (0 oder 100, 9 oder 109, 13 oder 113, 20 oder 120 und 21 oder 121) geben immer das Jahrhundert (jjjj) zurück.2 The default values (0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).

3 Eingabe, wenn in datetime konvertiert wird; Ausgabe, wenn in Zeichendaten konvertiert wird.3 Input when you convert to datetime; output when you convert to character data.

4 Vorgesehen für XML-Verwendung.4 Designed for XML use. Das Ausgabeformat für eine Konvertierung von datetime- oder smalldatetime-Daten in Zeichendaten finden Sie in der vorherigen Tabelle.For conversion from datetime or smalldatetime to character data, see the previous table for the output format.

5 Hijri ist ein Kalendersystem mit mehreren Variationen.5 Hijri is a calendar system with several variations. SQL ServerSQL Server verwendet den kuwaitischen Algorithmus. uses the Kuwaiti algorithm.

Wichtig

Standardmäßig verwendet SQL ServerSQL Server bei der Interpretation von zweistelligen Jahresangaben 2049 als Umstellungsjahr.By default, SQL ServerSQL Server interprets two-digit years based on a cutoff year of 2049. Dies bedeutet, dass SQL Server die zweistellige Angabe des Jahres 49 als 2049 und die zweistellige Angabe des Jahres 50 als 1950 interpretiert.That means that SQL Server interprets the two-digit year 49 as 2049 and the two-digit year 50 as 1950. Viele Clientanwendungen, einschließlich jener auf Grundlage der Automatisierungsobjekte, verwenden als Umstellungsjahr 2030.Many client applications, including those based on Automation objects, use a cutoff year of 2030. SQL ServerSQL Server stellt die Konfigurationsoption für das Umstellungsjahr für Angaben mit zwei Ziffern zur Änderung des von SQL ServerSQL Server verwendeten Umstellungsjahrs bereit. provides the two digit year cutoff configuration option to change the cutoff year used by SQL ServerSQL Server. Dies ermöglicht einen einheitlichen Umgang mit Datumsangaben.This allows for the consistent treatment of dates. Die Verwendung von vierstelligen Jahresangaben wird empfohlen.We recommend specifying four-digit years.

6 Wird nur bei der CAST-Umwandlung von Zeichendaten in datetime- oder smalldatetime-Werte unterstützt.6 Only supported when casting from character data to datetime or smalldatetime. Wenn Zeichendaten, die nur Zeit- oder nur Datumskomponenten darstellen, in die Datentypen datetime oder smalldatetime umgewandelt werden, wird die nicht angegebene Zeitkomponente auf 00:00:00.000 festgelegt und die nicht angegebene Datumskomponente auf 1900-01-01.When casting character data representing only date or only time components to the datetime or smalldatetime data types, the unspecified time component is set to 00:00:00.000, and the unspecified date component is set to 1900-01-01.

7Verwenden Sie den optionalen Zeitzonenindikator Z, um die Zuordnung von XML-datetime-Werten mit Zeitzoneninformationen zu SQL ServerSQL Server-datetime-Werte ohne Zeitzone zu vereinfachen.7Use the optional time zone indicator Z to make it easier to map XML datetime values that have time zone information to SQL ServerSQL Server datetime values that have no time zone. „Z“ steht für die Zeitzone UTC-0.Z indicates time zone UTC-0. Andere Zeitzonen werden durch einen positiven (+) oder negativen (-) Offset (HH:MM) angegeben.The HH:MM offset, in the + or - direction, indicates other time zones. Beispiel: 2006-12-12T23:45:12-08:00.For example: 2006-12-12T23:45:12-08:00.

Bei der Konvertierung von smalldatetime-Daten in Zeichendaten werden bei Formaten mit Sekunden oder Millisekunden an diesen Stellen Nullen ausgegeben.When converting smalldatetime to character data, the styles that include seconds or milliseconds show zeros in these positions. Sie können bei der Konvertierung von datetime- oder smalldatetime-Werten in einen char- oder varchar-Datentyp eine entsprechende Länge angeben, damit unerwünschte Teile in Datumsangaben abgeschnitten werden.When converting from datetime or smalldatetime values, use an appropriate char or varchar data type length to truncate unwanted date parts.

Bei der Konvertierung von Zeichendaten in datetimeoffset wird unter Verwendung eines Formats mit einer Zeitangabe ein Zeitzonenoffset an das Ergebnis angehängt.When converting character data to datetimeoffset, using a style that includes a time, a time zone offset is appended to the result.

float- und real-Formatefloat and real styles

Bei dem Ausdruck float oder real kann style einen der in der folgenden Tabelle aufgelisteten Werte aufweisen.For a float or real expression, style can have one of the values shown in the following table. Andere Werte werden als 0 verarbeitet.Other values are processed as 0.

valueValue AusgabeOutput
0 (Standardwert)0 (default) Maximal 6 Ziffern.A maximum of 6 digits. Wird ggf. in der wissenschaftlichen Schreibweise verwendet.Use in scientific notation, when appropriate.
11 Immer 8 Ziffern.Always 8 digits. Wird immer in der wissenschaftlichen Schreibweise verwendet.Always use in scientific notation.
22 Immer 16 Ziffern.Always 16 digits. Wird immer in der wissenschaftlichen Schreibweise verwendet.Always use in scientific notation.
33 Immer 17 Ziffern.Always 17 digits. Wird für die verlustlose Konvertierung verwendet.Use for lossless conversion. Mit diesem Format wird garantiert, dass jeder eindeutige „float“- oder „real“-Wert in eine eindeutige Zeichenfolge konvertiert wird.With this style, every distinct float or real value is guaranteed to convert to a distinct character string.

Gilt für: Azure SQL-DatenbankAzure SQL Database und beginnt ab SQL Server 2016 (13.x)SQL Server 2016 (13.x).Applies to: Azure SQL-DatenbankAzure SQL Database, and starting in SQL Server 2016 (13.x)SQL Server 2016 (13.x).
126, 128, 129126, 128, 129 Aufgenommen zur Kompatibilität mit Legacykomponenten, in zukünftigen Releases sind diese Werte möglicherweise als veraltet gekennzeichnet.Included for legacy reasons; a future release could deprecate these values.

money- und smallmoney-Formatemoney and smallmoney styles

Bei dem Ausdruck money oder smallmoney kann style einer der in der folgenden Tabelle aufgelisteten Werte aufweisen.For a money or smallmoney expression, style can have one of the values shown in the following table. Andere Werte werden als 0 verarbeitet.Other values are processed as 0.

valueValue AusgabeOutput
0 (Standardwert)0 (default) Links vom Dezimaltrennzeichen werden keine Tausendertrennzeichen eingefügt, rechts vom Dezimaltrennzeichen stehen zwei ZiffernNo commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Beispiel: 4235,98.Example: 4235.98.
11 Links vom Dezimaltrennzeichen werden Tausendertrennzeichen eingefügt, rechts vom Dezimaltrennzeichen stehen zwei ZiffernCommas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Beispiel: 3.510,92.Example: 3,510.92.
22 Links vom Dezimaltrennzeichen werden keine Tausendertrennzeichen eingefügt, rechts vom Dezimaltrennzeichen stehen vier ZiffernNo commas every three digits to the left of the decimal point, and four digits to the right of the decimal point

Beispiel: 4235,9819.Example: 4235.9819.
126126 Entspricht Format 2 bei der Konvertierung in char(n) oder varchar(n)Equivalent to style 2, when converting to char(n) or varchar(n)

xml-Formatexml styles

Wenn expression xml ist, kann style einen der in der folgenden Tabelle aufgelisteten Werte aufweisen.For an xml expression, style can have one of the values shown in the following table. Andere Werte werden als 0 verarbeitet.Other values are processed as 0.

valueValue AusgabeOutput
0 (Standardwert)0 (default) Standardanalyseverhalten verwenden, bei dem bedeutungslose Leerzeichen verworfen werden und interne DTD-Teilmengen nicht zulässig sind.Use default parsing behavior that discards insignificant white space, and does not allow for an internal DTD subset.

Hinweis: Beim Konvertieren in den xml-Datentyp werden bedeutungslose Leerzeichen aus SQL ServerSQL Server anders behandelt als in 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. Weitere Informationen finden Sie unter Erstellen von Instanzen der XML-Daten.For more information, see Create Instances of XML Data.
11 Bedeutungslose Leerzeichen erhalten.Preserve insignificant white space. Mit dieser Formateinstellung wird festgelegt, dass die Standardbehandlung xml:space dem Verhalten von xml:space="preserve" entspricht.This style setting sets the default xml:space handling to match the behavior of xml:space="preserve".
22 Begrenzte interne DTD-Teilmengenverarbeitung aktivieren.Enable limited internal DTD subset processing.

Bei Aktivierung kann der Server die folgenden Informationen, die in einer internen DTD-Teilmenge bereitgestellt werden, zur Ausführung von Analysevorgängen ohne Überprüfungscharakter verwenden.If enabled, the server can use the following information that is provided in an internal DTD subset, to perform nonvalidating parse operations.

– Für Attribute werden die Standardwerte angewendet- Defaults for attributes are applied
– Interne Entitätsverweise werden aufgelöst und erweitert- Internal entity references are resolved and expanded
– Das DTD-Inhaltsmodell wird auf seine syntaktische Richtigkeit überprüft- The DTD content model is checked for syntactical correctness

Der Parser ignoriert externe DTD-Teilmengen.The parser ignores external DTD subsets. Darüber hinaus nimmt er keine Bewertung der XML-Deklaration vor, um zu überprüfen, ob das eigenständige Attribut den Wert Ja oder Nein aufweist.Also, it does not evaluate the XML declaration to see whether the standalone attribute has a yes or no value. Stattdessen analysiert er die XML-Instanz wie ein eigenständiges Dokument.Instead, it parses the XML instance as a stand-alone document.
33 Bedeutungslose Leerzeichen erhalten und die Verarbeitung begrenzter interner DTD-Teilmengen aktivieren.Preserve insignificant white space, and enable limited internal DTD subset processing.

Binäre FormateBinary styles

Wenn expression binary(n), char(n), varbinary(n) oder varchar(n) ist, kann style einer der in der folgenden Tabelle aufgelisteten Werte sein.For a binary(n), char(n), varbinary(n), or varchar(n) expression, style can have one of the values shown in the following table. Bei Formatwerten, die nicht in der Tabelle aufgelistet sind, wird ein Fehler zurückgegeben.Style values not listed in the table will return an error.

valueValue AusgabeOutput
0 (Standardwert)0 (default) Übersetzt ASCII-Zeichen in binäre Bytes bzw. binäre Bytes in ASCII-Zeichen.Translates ASCII characters to binary bytes, or binary bytes to ASCII characters. Jedes Zeichen bzw. Byte wird 1:1 konvertiert.Each character or byte is converted 1:1.

Bei einem binären data_type werden die Zeichen 0x links neben dem Ergebnis hinzugefügt.For a binary data_type, the characters 0x are added to the left of the result.
1, 21, 2 Bei einem binären data_type muss der Ausdruck ein Zeichenausdruck sein.For a binary data_type, the expression must be a character expression. expression muss aus einer geraden Anzahl hexadezimaler Zeichen bestehen (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). Wenn der Ausdruck style auf 1 festgelegt ist, müssen die 0x die ersten beiden Zeichen sein.If the style is set to 1, the must have 0x as the first two characters. Wenn der Ausdruck eine ungerade Anzahl an Zeichen oder ein ungültiges Zeichen enthält, wird ein Fehler ausgelöst.If the expression contains an odd number of characters, or if any of the characters is invalid, an error is raised.

Wenn die Länge des konvertierten Ausdrucks die Länge von data_type übersteigt, wird das Ergebnis rechts abgeschnitten.If the length of the converted expression exceeds the length of the data_type, the result is right truncated.

Bei data_types mit fester Länge, die länger sind als das konvertierte Ergebnis, wird im Ergebnis rechts die entsprechende Anzahl Nullen angehängt.Fixed length data_types larger than the converted result have zeros added to the right of the result.

Für den Zeichentyp data_type ist ein binärer Ausdruck erforderlich.A data_type of type character requires a binary expression. Jedes Binärzeichen wird in zwei Hexadezimalzeichen konvertiert.Each binary character is converted into two hexadecimal characters. Wenn die Länge des konvertierten Ausdrucks die Länge von data_type übersteigt, wird der Ausdruck rechts abgeschnitten.If the length of the converted expression exceeds the length of the data_type, it will be right truncated.

Bei dem Zeichentyp data_type mit fester Länge werden rechts neben dem konvertierten Ausdruck Leerzeichen hinzugefügt, um eine gerade Anzahl an Hexadezimalstellen zu erhalten, wenn die Länge des konvertierten Ergebnisses kleiner ist als die Länge von data_type.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.

Bei style 1 werden links neben dem konvertierten Ergebnis die Zeichen 0x hinzugefügt.The characters 0x will be added to the left of the converted result for style 1.

Implizite KonvertierungenImplicit conversions

Bei impliziten Konvertierungen ist keine Spezifikation der CAST- oder CONVERT-Funktion erforderlich.Implicit conversions do not require specification of either the CAST function or the CONVERT function. Bei expliziten Konvertierungen ist eine Spezifikation der CAST- oder CONVERT-Funktion erforderlich.Explicit conversions require specification of the CAST function or the CONVERT function. In der folgenden Abbildung werden alle expliziten und impliziten Datentypkonvertierungen aufgeführt, die für die vom SQL ServerSQL Server-System bereitgestellten Datentypen zulässig sind.The following illustration shows all explicit and implicit data type conversions allowed for SQL ServerSQL Server system-supplied data types. Dazu gehören bigint, sql_variant und xml.These include bigint, and sql_variant, and xml. Es gibt keine implizite Konvertierung bei der Zuweisung vom sql_variant-Datentyp, eine implizite Konvertierung zum sql_variant-Datentyp findet jedoch statt.There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.

Tipp

Dieses Diagramm ist als herunterladbare PDF-Datei im Microsoft Download Center verfügbar.The Microsoft Download Center has this chart available for download as a PDF file.

Konvertierungstabelle für DatentypenData type conversion table

Beim Konvertieren zwischen datetimeoffset und den Zeichentypen char, nchar, nvarchar und varchar sollte der konvertierte Zeitzonenoffset-Teil sowohl für HH als auch für MM stets zwei Stellen umfassen.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. Beispiel: -08:00.For example, -08:00.

Hinweis

Da Unicode-Daten immer eine gerade Anzahl von Bytes verwenden, muss das Konvertieren von binary- oder varbinary-Datentypen in oder von Unicode-Datentypen vorsichtig erfolgen.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. Die folgende Konvertierung gibt beispielsweise nicht den Hexadezimalwert 41 zurück.For example, the following conversion does not return a hexadecimal value of 41. Sie gibt den Hexadezimalwert 4100 zurück: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).It returns a hexadecimal value of 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).

Datentypen mit umfangreichen Werten Large-value data types

Datentypen mit hohen Werten weisen das gleiche implizite und explizite Konvertierungsverhalten auf wie ihre Entsprechungen mit kleineren Werten, insbesondere die Datentypen nvarchar, varbinary und 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. Beachten Sie jedoch folgende Richtlinien:However, consider the following guidelines:

  • Die Konvertierung von image in varbinary(max) und umgekehrt stellt ebenso wie zwischen text und varchar(max) sowie ntext und nvarchar(max) eine implizite Konvertierung dar.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).
  • Die Konvertierung von Datentypen mit hohen Werten, z.B. varchar(max), in einen entsprechenden kleineren Datentyp, z.B. varchar, ist zwar eine implizite Konvertierung, doch kommt es zu einer Abschneidung, wenn die Größe des hohen Werts die angegebene Länge des kleineren Datentyps überschreitet.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.
  • Die Konvertierung von nvarchar, varbinary oder varchar in einen entsprechenden kleineren Datentyp erfolgt implizit.Conversion from nvarchar, varbinary, or varchar to their corresponding large-value data types happens implicitly.
  • Die Konvertierung vom sql_variant-Datentyp in einen Datentyp mit hohen Werten ist eine explizite Konvertierung.Conversion from the sql_variant data type to the large-value data types is an explicit conversion.
  • Datentypen mit hohen Werten können nicht in den sql_variant-Datentyp konvertiert werden.Large-value data types cannot be converted to the sql_variant data type.

Weitere Informationen zum Konvertieren des xml-Datentyps finden Sie unter Erstellen von Instanzen der XML-Daten.For more information about conversion from the xml data type, see Create Instances of XML Data.

xml-Datentypxml data type

Wenn Sie den xml-Datentyp explizit oder implizit in einen Zeichenfolgen- oder Binärdatentyp umwandeln, wird der Inhalt des xml-Datentyps nach einer definierten Reihe von Regeln serialisiert.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. Informationen zu diesen Regeln finden Sie unter Definieren der Serialisierung von XML-Daten.For information about these rules, see Define the Serialization of XML Data. Weitere Informationen zum Konvertieren anderer Datentypen in den xml-Datentyp finden Sie unter Erstellen von Instanzen der XML-Daten.For information about conversion from other data types to the xml data type, see Create Instances of XML Data.

text- und image-Datentyptext and image data types

Die automatische Datentypkonvertierung wird für die Datentypen text und image nicht unterstützt.The text and image data types do not support automatic data type conversion. Die explizite Konvertierung von text-Daten in Zeichendaten und von image- in binary- oder varbinary-Daten ist zwar möglich, doch nur bis zu einer maximalen Länge von 8000 Bytes.You can explicitly convert text data to character data, and image data to binary or varbinary, but the maximum length is 8000 bytes. Falls Sie versuchen, eine unzulässige Konvertierung vorzunehmen, wie z.B. die Konvertierung eines Zeichenausdrucks mit Buchstaben in int-Daten, gibt SQL ServerSQL Server eine Fehlermeldung zurück.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.

AusgabesortierungOutput Collation

Wenn die CAST- oder die CONVERT-Funktion eine Zeichenfolge ausgeben und eine Zeichenfolgeneingabe empfangen, hat die Ausgabe dieselbe Sortierung und Sortierungsbezeichnung wie die Eingabe.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. Wenn die Eingabe keine Zeichenfolge ist, hat die Ausgabe die Standardsortierung der Datenbank und die Sortierungsbezeichnung coercible-default (Standard erzwingbar).If the input is not a character string, the output has the default collation of the database, and a collation label of coercible-default. Weitere Informationen finden Sie unter Rangfolge von Sortierungen (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

Wenn Sie der Ausgabe eine andere Sortierung zuweisen möchten, wenden Sie die COLLATE-Klausel auf den Ergebnisausdruck der CAST- oder CONVERT-Funktion an.To assign a different collation to the output, apply the COLLATE clause to the result expression of the CAST or CONVERT function. Zum Beispiel:For example:

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

Abschneiden und Runden von ErgebnissenTruncating and rounding results

Beim Konvertieren von Zeichen- oder Binärdatenausdrücken (binary, char, nchar, nvarchar, varbinary oder varchar) in einen Ausdruck eines anderen Datentyps könnten bei der Konvertierung die Ausgabedaten abgeschnitten oder nur teilweise angezeigt werden, oder es könnte ein Fehler zurückgegeben werden.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. Dies geschieht, wenn das Ergebnis zu kurz ist, um angezeigt zu werden.These cases will occur if the result is too short to display. Konvertierungen in binary, char, nchar, nvarchar, varbinary oder varchar werden abgeschnitten, mit Ausnahme der in der folgenden Tabelle aufgelisteten Konvertierungen.Conversions to binary, char, nchar, nvarchar, varbinary, or varchar are truncated, except for the conversions shown in the following table.

AusgangsdatentypFrom data type ZieldatentypTo data type ErgebnisResult
int, smallint oder tinyintint, smallint, or tinyint charchar *
varcharvarchar *
ncharnchar EE
nvarcharnvarchar EE
money, smallmoney, numeric, decimal, float oder realmoney, smallmoney, numeric, decimal, float, or real charchar EE
varcharvarchar EE
ncharnchar EE
nvarcharnvarchar EE

* = Die Ergebnislänge ist zu kurz, um angezeigt zu werden* = Result length too short to display

E = Error. Es wird ein Fehler zurückgegeben, da die Ergebnislänge zu kurz ist, um angezeigt zu werden.E = Error returned because result length is too short to display.

In SQL ServerSQL Server wird sichergestellt, dass nur reversible Konvertierungen (d.h. Konvertierungen, bei denen konvertierte Datentypen in den ursprünglichen Datentyp zurückkonvertiert werden können) von Version zu Version die gleichen Ergebnisse erzielen. 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. Im folgenden Beispiel wird eine solche Hin- und Rückkonvertierung veranschaulicht: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));  

Hinweis

Erstellen Sie keine binary-Werte, um sie anschließend in einen Datentyp der numerischen Datentypkategorie zu konvertieren.Do not construct binary values, and then convert them to a data type of the numeric data type category. SQL ServerSQL Server garantiert nicht, dass das Ergebnis einer Datentypkonvertierung von decimal oder numeric in binary dem Ergebnis entspricht, das zwischen Versionen von SQL ServerSQL Server erzielt wird. 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.

Im folgenden Beispiel ist der resultierende Ausdruck zu klein, um angezeigt zu werden.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;  

Im Folgenden finden Sie das Resultset.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)  

Beim Konvertieren von Datentypen mit unterschiedlichen Dezimalstellen gibt SQL Server manchmal einen abgeschnittenen oder einen gerundeten Ergebniswert zurück.When you convert data types that differ in decimal places, SQL Server will sometimes return a truncated result value, and at other times it will return a rounded value. In dieser Tabelle wird das Verhaltensmuster veranschaulicht.This table shows the behavior.

VonFrom AktionTo VerhaltenBehavior
numericnumeric numericnumeric RoundRound
numericnumeric intint AbschneidenTruncate
numericnumeric moneymoney RoundRound
moneymoney intint RoundRound
moneymoney numericnumeric RoundRound
floatfloat intint AbschneidenTruncate
floatfloat numericnumeric RoundRound

Die Konvertierung der float-Werte, die eine wissenschaftliche Schreibweise für decimal oder numeric verwenden, ist auf Werte mit einer Genauigkeit von 17 Stellen beschränkt.Conversion of float values that use scientific notation to decimal or numeric is restricted to values of precision 17 digits only. Alle Werte mit einer Genauigkeit von mehr als 17 Stellen werden auf Null gerundet.Any value with precision higher than 17 rounds to zero.
floatfloat datetimedatetime RoundRound
datetimedatetime intint RoundRound

Die Werte 10.6496 und -10.6496 können z.B. während der Konvertierung in int- oder numeric-Types abgeschnitten oder gerundet werden: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;

Die Ergebnisse der Abfrage sind in der folgenden Tabelle aufgeführt:Results of the query are shown in the following table:

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

Falls eine Konvertierung von Datentypen vorgenommen wird, bei der der Zieldatentyp weniger Dezimalstellen aufweist als der Quelldatentyp, wird der Wert gerundet.When converting data types where the target data type has fewer decimal places than the source data type, the value is rounded. Bei dieser Konvertierung wird beispielsweise $10.3497 zurückgegeben:For example, this conversion returns $10.3497:

SELECT CAST(10.3496847 AS money);

SQL ServerSQL Server gibt eine Fehlermeldung zurück, wenn die nicht numerischen Daten char, nchar, varchar oder nvarchar in die Typen decimal, float, int oder numeric konvertiert werden. returns an error message when converting nonnumeric char, nchar, nvarchar, or varchar data to decimal, float, int, numeric. SQL ServerSQL Server gibt außerdem einen Fehler zurück, wenn eine leere Zeichenfolge (" ") in numeric oder decimal konvertiert wird. also returns an error when an empty string (" ") is converted to numeric or decimal.

Bestimmte datetime-Konvertierungen sind nicht deterministischCertain datetime conversions are nondeterministic

In der folgenden Tabelle werden die Formate aufgelistet, bei denen die Konvertierung von string in datetime nicht deterministisch ist.The following table lists the styles for which the string-to-datetime conversion is nondeterministic.

Alle Formate unter 1001All styles below 1001 106106
107107 109109
113113 130130

1 Mit Ausnahme der Formate 20 und 211 With the exception of styles 20 and 21

Ergänzende Zeichen (Ersatzpaare)Supplementary characters (surrogate pairs)

Wenn Sie in Versionen ab SQL Server 2012 (11.x)SQL Server 2012 (11.x) Sortierungen ergänzender Zeichen verwenden, wird ein CAST-Vorgang von nchar oder nvarchar zu einem nchar- oder nvarchar-Typ von geringerer Länge in einem Ersatzzeichenpaar nicht abgeschnitten.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. Stattdessen wird er vor dem ergänzenden Zeichen abgeschnitten.Instead, the operation truncates before the supplementary character. Im folgenden Codefragment wird @x z. B. weggelassen, sodass nur 'ab' erhalten bleibt.For example, the following code fragment leaves @x holding just 'ab'. Es ist nicht genügend Platz für das ergänzende Zeichen vorhanden.There is not enough space to hold the supplementary character.

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

Bei SC-Sortierungen entspricht das Verhalten von CONVERT dem von CAST.When using SC collations, the behavior of CONVERT, is analogous to that of CAST.

KompatibilitätsunterstützungCompatibility support

In früheren Versionen von SQL ServerSQL Server ist das Standardformat für CAST- und CONVERT-Vorgänge bei den Datentypen time und datetime2 121, sofern keiner der Typen im Ausdruck einer berechneten Spalte verwendet wird.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. Für berechnete Spalten ist das Standardformat 0.For computed columns, the default style is 0. Dieses Verhalten wirkt sich auf berechnete Spalten aus, wenn sie erstellt werden und in Abfragen mit automatischer Parametrisierung oder in Einschränkungsdefinitionen verwendet werden.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

Unter dem Kompatibilitätsgrad 110 und höher ist das Standardformat für CAST- und CONVERT-Vorgänge im Fall der Datentypen time und datetime2 immer 121.Under compatibility level 110 and higher, the CAST and CONVERT operations on the time and datetime2 datatypes always have 121 as the default style. Basiert die Abfrage auf dem alten Verhalten, verwenden Sie einen Kompatibilitätsgrad unter 110, oder geben Sie in der betroffenen Abfrage explizit das Format 0 an.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.

Ein Upgrade der Datenbank auf Kompatibilitätsgrad 110 und höher ändert keine Benutzerdaten, die auf dem Datenträger gespeichert wurden.Upgrading the database to compatibility level 110 and higher will not change user data that has been stored to disk. Sie müssen diese Daten entsprechend manuell korrigieren.You must manually correct this data as appropriate. Haben Sie beispielsweise SELECT INFO zum Erstellen einer Tabelle von einer Quelle verwendet, die einen Ausdruck für eine berechnete Spalte (oben beschrieben) beinhaltet, werden die Daten mit dem Format 0 anstelle der Definition der berechneten Spalte an sich gespeichert.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. Sie müssen diese Daten manuell aktualisieren, um sie an das Format 121 anzupassen.You must manually update this data to match style 121.

BeispieleExamples

A.A. Verwenden von CAST und CONVERTUsing both CAST and CONVERT

In diesen Beispielen werden die Namen der Produkte abgerufen, deren Listenpreis mit der Ziffer 3 beginnt. Die ListPrice-Werte werden in int-Werte konvertiert.These examples retrieve the name of the product, for those products that have a 3 as the first digit of list price, and converts their ListPrice values to int.

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

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

B.B. Verwenden von CAST mit arithmetischen OperatorenUsing CAST with arithmetic operators

Im folgenden Beispiel wird eine einzelne Spalte (Computed) berechnet. Hierbei wird der Gesamtumsatz des laufenden Jahres (SalesYTD) durch den Prozentsatz der Umsatzbeteiligung (CommissionPCT) geteilt.This example calculates a single column computation (Computed) by dividing the total year-to-date sales (SalesYTD) by the commission percentage (CommissionPCT). Dieser Wert wird auf die nächste Ganzzahl gerundet und anschließend mithilfe von CAST in einen int-Datentyp konvertiert.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  

Im Folgenden finden Sie das Resultset.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. Verwenden von CAST zur VerkettungUsing CAST to concatenate

Im folgenden Beispiel werden nicht auf Zeichen basierende Ausdrücke mithilfe von CAST verkettet.This example concatenates noncharacter expressions by using CAST. Die Datenbank AdventureWorksDW wird verwendet.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;  

Im Folgenden finden Sie das Resultset.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. Verwenden von CAST zur Generierung besser lesbaren TextsUsing CAST to produce more readable text

Im folgenden Beispiel wird CAST in der SELECT-Liste verwendet, um die Name-Spalte in eine char(10)-Spalte zu konvertieren.This example uses CAST in the SELECT list, to convert the Name column to a char(10) column. Die Datenbank AdventureWorksDW wird verwendet.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';  

Im Folgenden finden Sie das Resultset.Here is the result set.

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

E.E. Verwenden von CAST mit der LIKE-KlauselUsing CAST with the LIKE clause

In diesem Beispiel werden die SalesYTD-Werte der Spalte money in den Datentyp int und anschließend in den Datentypchar(20) konvertiert, damit sie mit der LIKE-Klausel verwendet werden können.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  

Im Folgenden finden Sie das Resultset.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. Verwenden von CONVERT oder CAST mit typisierter XMLUsing CONVERT or CAST with typed XML

In den folgenden Beispielen wird die Konvertierung in typisierte XML-Daten mithilfe von CONVERT und mit XML-Datentyp und -Spalten (SQL Server) dargestellt.These examples show use of CONVERT to convert data to typed XML, by using the XML Data Type and Columns (SQL Server).

In diesem Beispiel wird eine aus Leerzeichen, Text und Markup bestehende Zeichenfolge in typisierte XML-Daten konvertiert und alle bedeutungslosen Leerzeichen (begrenzender Leerraum zwischen Knoten) entfernt: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 diesem Beispiel wird eine ähnliche, aus Leerzeichen, Text und Markup bestehende Zeichenfolge in typisierte XML-Daten konvertiert und alle bedeutungslosen Leerzeichen (begrenzender Leerraum zwischen Knoten) beibehalten.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 diesem Beispiel wird eine aus Leerzeichen, Text und Markup bestehende Zeichenfolge in typisierte XML-Daten umgewandelt: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)  

Weitere Beispiele finden Sie unter Erstellen von Instanzen der XML-Daten.See Create Instances of XML Data for more examples.

G.G. Verwenden von CAST und CONVERT mit datetime-DatenUsing CAST and CONVERT with datetime data

Beginnend mit GETDATE()-Werten werden im folgenden Beispiel das aktuelle Datum und die aktuelle Uhrzeit dargestellt. CAST wird verwendet, um das aktuelle Datum und die aktuelle Uhrzeit in einen Zeichendatentyp zu ändern. Anschließend wird CONVERT verwendet, um das Datum und die Uhrzeit im ISO 8601-Format anzuzeigen.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  

Im Folgenden finden Sie das Resultset.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)  

Das folgende Beispiel entspricht in etwa der Umkehrung des vorherigen Beispiels.This example is approximately the opposite of the previous example. In diesem Beispiel werden ein Datum und eine Uhrzeit als Zeichendaten angezeigt. CAST wird verwendet, um die Zeichendaten in datetime-Datentypen zu ändern. Anschließend wird CONVERT verwendet, um die Zeichendaten in den datetime-Datentyp zu ändern.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  

Im Folgenden finden Sie das Resultset.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. Verwenden von CONVERT mit Binär- und ZeichendatenUsing CONVERT with binary and character data

Die folgenden Beispiele zeigen die Ergebnisse der Konvertierung von Binär- und Zeichendaten mit verschiedenen Formaten.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];  

Im Folgenden finden Sie das Resultset.Here is the result set.

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

Dieses Beispiel zeigt, wie Format 1 das Abschneiden von Ergebnissen erzwingen kann.This example shows that Style 1 can force result truncation. Die Zeichen 0x im Ergebnis erzwingen das Abschneiden.The characters 0x in the result set force the truncation.

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

Im Folgenden finden Sie das Resultset.Here is the result set.

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

Das folgende Beispiel zeigt, dass Format 2 das Ergebnis nicht abschneidet, da die Zeichen 0x nicht im Ergebnis enthalten sind.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];  

Im Folgenden finden Sie das Resultset.Here is the result set.

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

Konvertieren Sie den Zeichenwert 'Name' in einen Binärwert.Convert the character value 'Name' to a binary value.

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

Im Folgenden finden Sie das Resultset.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];  

Im Folgenden finden Sie das Resultset.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];  

Im Folgenden finden Sie das Resultset.Here is the result set.

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

I.I. Vergleichen von date- und time-DatentypenConverting date and time data types

Das folgende Beispiel zeigt die Konvertierung von date-, time- und datetime-Datentypen.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];  

Beispiele: Azure SQL Data WarehouseAzure SQL Data Warehouse und Parallel Data WarehouseParallel Data Warehouse.Examples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

J.J. Verwenden von CAST und CONVERTUsing CAST and CONVERT

In diesem Beispiele werden die Namen der Produkte abgerufen, deren Listenpreis mit der Ziffer 3 beginnt. Der ListPrice-Wert dieser Produkte wird in einen int-Wert konvertiert. Die Datenbank AdventureWorksDW wird verwendet.This example retrieves the name of the product for those products that have a 3 in the first digit of their list price, and converts the ListPrice of these products to int. It uses the AdventureWorksDW database.

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

Dieses Beispiel zeigt dieselbe Abfrage mit CONVERT anstatt CAST.This example shows the same query, using CONVERT instead of CAST. Die Datenbank AdventureWorksDW wird verwendet.It uses the AdventureWorksDW database.

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

K.K. Verwenden von CAST mit arithmetischen OperatorenUsing CAST with arithmetic operators

Im folgenden Beispiel wird eine einzelne Spalte berechnet. Hierbei wird der Einzelpreis des Produkts (UnitPrice) durch den Prozentsatz für den Abzug (UnitPriceDiscountPct) geteilt.This example calculates a single column value by dividing the product unit price (UnitPrice) by the discount percentage (UnitPriceDiscountPct). Dieses Ergebnis wird in einen int-Datentyp konvertiert, nachdem es auf die nächste ganze Zahl gerundet wurde.This result is then rounded to the nearest whole number, and finally converted to an int data type. In diesem Beispiel wird die Datenbank AdventureWorks verwendet.This example uses the AdventureWorksDW database.

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

Im Folgenden finden Sie das Resultset.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. Verwenden von CAST mit der LIKE-KlauselUsing CAST with the LIKE clause

Im folgenden Beispiel wird die Spalte money ListPrice in eine Spalte des Typs int und anschließend in eine Spalte des Typs char(20) umgewandelt, damit sie mit der LIKE-Klausel verwendet werden kann.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 diesem Beispiel wird die Datenbank AdventureWorks verwendet.This example uses the AdventureWorksDW database.

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

M.M. Verwenden von CAST und CONVERT mit datetime-DatenUsing CAST and CONVERT with datetime data

Im folgenden Beispiel werden das aktuelle Datum und die aktuelle Uhrzeit dargestellt. CAST wird verwendet, um das aktuelle Datum und die aktuelle Uhrzeit in einen Zeichendatentyp zu ändern. Anschließend werden das Datum und die Uhrzeit mithilfe von CONVERT im ISO 8601-Format angezeigt.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 diesem Beispiel wird die Datenbank AdventureWorks verwendet.This example uses the AdventureWorksDW database.

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

Im Folgenden finden Sie das Resultset.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  

Das folgende Beispiel entspricht in etwa der Umkehrung des vorherigen Beispiels.This example is the rough opposite of the previous example. In dem Beispiel werden ein Datum und eine Uhrzeit als Zeichendaten angezeigt. CAST wird verwendet, um die Zeichendaten in datetime-Datentypen zu ändern. Anschließend werden die Zeichendaten mithilfe von CONVERT in den datetime-Datentyp zu ändern.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 diesem Beispiel wird die Datenbank AdventureWorks verwendet.This example uses the AdventureWorksDW database.

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

Im Folgenden finden Sie das Resultset.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  

Siehe auchSee also

Datentypkonvertierung (Datenbank-Engine)Data Type Conversion (Database Engine)
FORMAT (Transact-SQL)FORMAT (Transact-SQL)
STR (Transact-SQL)STR (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)
Systemfunktionen (Transact-SQL)System Functions (Transact-SQL)
Schreiben internationaler Transact-SQL-AnweisungenWrite International Transact-SQL Statements