CAST und CONVERT (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzAzure Synapse AnalyticsSQL-Analyseendpunkt in Microsoft FabricLagerhaus in Microsoft FabricSQL-Datenbank in Microsoft Fabric

Mit diesen Funktionen wird ein Ausdruck von einem Datentyp in einen anderen konvertiert.

Syntax

CAST-Syntax:

CAST ( expression AS data_type [ ( length ) ] )

CONVERT-Syntax:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Transact-SQL-Syntaxkonventionen

Argumente

Ausdruck

Beliebiger gültiger Ausdruck.

data_type

Der Zieldatentyp. Dazu gehören xml, bigint und sql_variant. Aliasdatentypen können nicht verwendet werden.

Länge

Eine optionale ganze Zahl, die die Länge des Zieldatentyps angibt, falls eine vom Benutzer angegebene Länge für den Datentyp zulässig ist. Der Standardwert ist 30.

Stil

Ein ganzzahliger Ausdruck, der angibt, wie die CONVERT Funktion den Ausdruck übersetzt. Für einen Stilwert von NULLwird NULL zurückgegeben. data_type bestimmt den Bereich.

Rückgabetypen

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

Datums- und Uhrzeitformate

Bei dem Datums- oder Uhrzeitdatentyp expression kann style einer der in der folgenden Tabelle aufgelisteten Werte sein. Andere Werte werden als 0verarbeitet. Ab SQL Server 2012 (11.x) werden 0 nur noch Stile beim Umwandeln von Datums- und Zeittypen in datetimeoffset unterstützt: oder 1. Bei allen anderen Konvertierungsformaten wird der Fehler 9809 zurückgegeben.

Hinweis

Die SQL Server-Datenbank-Engine unterstützt das Datumsformat im arabischen Stil mit dem kuwaitischen Algorithmus.

Ohne Jahrhundert (jj) 1 Mit Jahrhundert (jjjj) Norm Eingabe/Ausgabe 3
- 0oder 1001,2 Standard für datetime und smalldatetime MMM dd yyyy hh:mmtt (tt ist AM oder PM)
1 101 USA 1 = MM/dd/yy
101 = MM/dd/yyyy
2 102 ANSI (Amerikanisches Institut für Normung) 2 = yy.MM.dd
102 = yyyy.MM.dd
3 103 Britisch/Französisch 3 = dd/MM/yy
103 = dd/MM/yyyy
4 104 Deutsch 4 = dd.MM.yy
104 = dd.MM.yyyy
5 105 Italienisch 5 = dd-MM-yy
105 = dd-MM-yyyy
6 106 1 - 6 = dd MMM yy
106 = dd MMM yyyy
7 107 1 - 7 = MMM dd, yy
107 = MMM dd, yyyy
8 oder 24 108 - HH:mm:ss
- 9oder 1091,2 Standardwert + Millisekunden MMM dd yyyy hh:mm:ss:ffftt (tt ist AM oder PM)
10 110 USA 10 = MM-dd-yy
110 = MM-dd-yyyy
11 111 Japan 11 = yy/MM/dd
111 = yyyy/MM/dd
12 112 ISO 12 = yyMMdd
112 = yyyyMMdd
- 13oder 1131,2 Europ. Standard + Millisekunden dd MMM yyyy HH:mm:ss:fff (24 Stunden)
14 114 - HH:mm:ss:fff (24 Stunden)
- 20 oder 1202 ODBC kanonisch yyyy-MM-dd HH:mm:ss (24 Stunden)
- 21oder 25oder121 2 ODBC (mit Millisekunden) ist der Standard für time, date, datetime2 und datetimeoffset yyyy-MM-dd HH:mm:ss.fff (24 Stunden)
22 - USA MM/dd/yy hh:mm:ss tt (tt ist AM oder PM)
- 23 ISO8601 yyyy-MM-dd
- 126 4 ISO8601 yyyy-MM-ddTHH:mm:ss.fff (Keine Leerzeichen) 6
- 127 8, 9 ISO8601 mit Zeitzone Z yyyy-MM-ddTHH:mm:ss.fffZ (Keine Leerzeichen) 6
- 130 1,2 Hijri 5 dd MMMM yyyy hh:mm:ss:ffftt 7
- 131 2 Hijri 5 dd/MM/yyyy hh:mm:ss:ffftt

1 Diese Formatwerte geben nicht deterministische Ergebnisse zurück. Dazu gehören alle yy-Formate (ohne Jahrhundert) und eine Teilmenge der yyyy-Formate (mit Jahrhundert).

2 Die Standardwerte (0 oder 100, 9 oder 109, oder , 13 oder 113, 20 oder 120, 23, , und 21 oder 25 oder ) 121geben immer das Jahrhundert (yyyy) zurück.

Wichtig

Standardmäßig interpretiert die SQL Server-Datenbank-Engine zweistellige Jahre basierend auf einem Stichzeitsjahr 2049. Das bedeutet, dass die Datenbank-Engine das zweistellige Jahr 49 als 2049 und das zweistellige Jahr 50 als 1950 interpretiert. Viele Clientanwendungen, einschließlich jener auf Grundlage der Automatisierungsobjekte, verwenden als Umstellungsjahr 2030. Die Datenbank-Engine bietet die zweistellige Konfigurationsoption für das Jahr, um das von der Datenbank-Engine verwendete Cutoff-Jahr zu ändern. Dies ermöglicht einen einheitlichen Umgang mit Datumsangaben. Die Verwendung von vierstelligen Jahresangaben wird empfohlen.

3 Eingabe, wenn in datetime konvertiert wird; Ausgabe, wenn in Zeichendaten konvertiert wird.

4 Vorgesehen für XML-Verwendung. Das Ausgabeformat für eine Konvertierung von datetime- oder smalldatetime-Daten in Zeichendaten finden Sie in der vorherigen Tabelle.

5 Hijri ist ein Kalendersystem mit mehreren Variationen. Die Datenbank-Engine verwendet den kuwaitischen Algorithmus.

6 Bei einem Millisekundenwert (fff) von 0 wird der Dezimalbruch des Millisekundenwerts nicht angezeigt. Der Wert 2022-11-07T18:26:20.000 wird beispielsweise als 2022-11-07T18:26:20 angezeigt.

7 In dieser Formatvorlage MMMM stellt eine Multitoken-Hijri Unicode-Darstellung des vollständigen Monatsnamens dar. In einer US-Standardinstallation von SSMS wird dieser Wert nicht ordnungsgemäß gerendert.

8 Wird nur bei der CAST-Umwandlung von Zeichendaten in datetime- oder smalldatetime-Werte unterstützt. 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.

9 Verwenden Sie die optionale Zeitzonenanzeige, Z um XML-Datumszeitwerte mit Zeitzoneninformationen auf die Datenbank-Engine Datumszeitwerte ohne Zeitzone abzubilden. Z steht für die Zeitzone UTC-0. Andere Zeitzonen werden durch einen HH:mm-Offset in +- oder --Richtung angegeben. Beispiel: 2022-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. 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.

Bei der Konvertierung von Zeichendaten in datetimeoffset wird unter Verwendung eines Formats mit einer Zeitangabe ein Zeitzonenoffset an das Ergebnis angehängt.

float- und real-Formate

Wenn expressionfloat oder real ist, kann style einen der in der folgenden Tabelle aufgelisteten Werte aufweisen. Andere Werte werden als 0verarbeitet.

Wert Ausgabe
0 (Standardwert) Maximal 6 Ziffern. Wird ggf. in der wissenschaftlichen Schreibweise verwendet.
1 Immer 8 Ziffern. Wird immer in der wissenschaftlichen Schreibweise verwendet.
2 Immer 16 Ziffern. Wird immer in der wissenschaftlichen Schreibweise verwendet.
3 Immer 17 Ziffern. Wird für die verlustlose Konvertierung verwendet. Mit diesem Format wird garantiert, dass jeder eindeutige „float“- oder „real“-Wert in eine eindeutige Zeichenfolge konvertiert wird.

Gilt für: SQL Server 2016 (13.x) und höhere Versionen und Azure SQL-Datenbank.
126, 128, 129 Enthalten aufgrund der Kompatibilität mit Legacyversionen. Verwenden Sie diese Werte nicht für die Entwicklung neuer Anwendungen.

money- und smallmoney-Formate

Wenn expressionmoney oder smallmoney ist, kann style einen der in der folgenden Tabelle aufgelisteten Werte aufweisen. Andere Werte werden als 0verarbeitet.

Wert Ausgabe
0 (Standardwert) Links vom Dezimaltrennzeichen werden keine Tausendertrennzeichen eingefügt, rechts vom Dezimaltrennzeichen stehen zwei Ziffern

Beispiel: 4235.98.
1 Links vom Dezimaltrennzeichen werden Tausendertrennzeichen eingefügt, rechts vom Dezimaltrennzeichen stehen zwei Ziffern

Beispiel: 3,510.92.
2 Links vom Dezimaltrennzeichen werden keine Tausendertrennzeichen eingefügt, rechts vom Dezimaltrennzeichen stehen vier Ziffern

Beispiel: 4235.9819.
126 Äquivalent zum Stil 2, wenn man in Char(n) oder varchar(n) umwandelt

xml-Formate

Wenn expressionxml ist, kann style einen der in der folgenden Tabelle aufgelisteten Werte aufweisen. Andere Werte werden als 0verarbeitet.

Wert Ausgabe
0 (Standardwert) Standardanalyseverhalten verwenden, bei dem bedeutungslose Leerzeichen verworfen werden und interne DTD-Teilmengen nicht zulässig sind.

Hinweis: Bei der Konvertierung in den XML-Datentyp behandelt die Datenbank-Engine unbedeutenden Weißraum anders als XML 1.0. Weitere Informationen finden Sie unter Erstellen von XML-Daten-Instanzen.
1 Bedeutungslose Leerzeichen erhalten. Mit dieser Formateinstellung wird festgelegt, dass die Standardbehandlung xml:space dem Verhalten von xml:space="preserve" entspricht.
2 Begrenzte interne DTD-Teilmengenverarbeitung aktivieren.

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.

– Für Attribute werden die Standardwerte angewendet
– Interne Entitätsverweise werden aufgelöst und erweitert
– Das DTD-Inhaltsmodell wird auf seine syntaktische Richtigkeit überprüft

Der Parser ignoriert externe DTD-Teilmengen. Außerdem wird die XML-Deklaration nicht ausgewertet, um zu sehen, ob das eigenständige Attribut einen yes oder no besitzt. Stattdessen analysiert er die XML-Instanz wie ein eigenständiges Dokument.
3 Bedeutungslose Leerzeichen erhalten und die Verarbeitung begrenzter interner DTD-Teilmengen aktivieren.

Binäre Formate

Bei einem binär(n)-, char(n)-, varbinary(n)- oder varchar(n)-Ausdruck kann die Formatvorlage einen der in der folgenden Tabelle gezeigten Werte aufweisen. Stilwerte, die nicht in der Tabelle aufgeführt sind, liefern einen Fehler.

Wert Ausgabe
0 (Standardwert) Übersetzt ASCII-Zeichen in binäre Bytes bzw. binäre Bytes in ASCII-Zeichen. Jedes Zeichen bzw. Byte wird 1:1 konvertiert.

Bei einem binären data_type werden die Zeichen 0x links vom Ergebnis hinzugefügt.
1, 2 Bei einem binären data_type muss der Ausdruck ein Zeichenausdruck sein. Der Ausdruck muss eine gerade Anzahl hexadezimaler Stellen haben (0, 1, 2, 3, 45, 9ebfdcaFEDB8C67A) Wenn der Stil auf 1gesetzt ist, muss der Ausdruck die ersten beiden Zeichen sein 0x . Wenn der Ausdruck eine ungerade Anzahl an Zeichen oder ein ungültiges Zeichen enthält, wird ein Fehler ausgelöst.

Wenn die Länge des konvertierten Ausdrucks die Länge von data_type übersteigt, wird das Ergebnis rechts abgeschnitten.

Bei data_types mit fester Länge, die länger sind als das konvertierte Ergebnis, wird im Ergebnis rechts die entsprechende Anzahl an Nullen angehängt.

Für den Zeichentyp data_type ist ein binärer Ausdruck erforderlich. Jedes Binärzeichen wird in zwei Hexadezimalzeichen konvertiert. Angenommen, die Länge des konvertierten Ausdrucks überschreitet die Länge von data_type. In diesem Fall wird er abgeschnitten.

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.

Die Charaktere 0x werden aus stilistischen2 Gründen nicht links vom konvertierten Ergebnis hinzugefügt.

Implizite Konvertierungen

Bei impliziten Konvertierungen ist keine Spezifikation der CAST- oder CONVERT-Funktion erforderlich. Bei expliziten Konvertierungen ist eine Spezifikation der CAST- oder CONVERT-Funktion erforderlich. Die folgende Abbildung zeigt alle expliziten und impliziten Datentyp-Konvertierungen, die für die vom Datenbank-Engine systembereitgestellten Datentypen erlaubt sind. Dazu gehören Binacht,sql_variant, xml, hierarchyid, geography, geometry, json und vector. Die Datentypen JSON und Vektor sind nur in SQL Server 2025 (17.x), Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Microsoft Fabric verfügbar. Es gibt keine implizite Umwandlung bei der Zuweisung aus dem sql_variant Datentyp, aber eine implizite Umwandlung in sql_variant.

Diagramm, das zeigt, welche Konvertierungen zwischen SQL Server-Datentypen explizit, implizit oder nicht erlaubt sind, einschließlich der Hierarchie-ID-, Geografie-, Geometrie-, JSON- und Vektordatentypen.

Die obige Grafik zeigt alle expliziten und impliziten Konvertierungen, die in der Datenbank-Engine erlaubt sind, aber der resultierende Datentyp der Konvertierung hängt von der durchgeführten Operation ab:

  • Bei expliziten Konvertierungen bestimmt die Anweisung selbst den sich ergebenden Datentyp.
  • Bei impliziten Konvertierungen führen Zuweisungsanweisungen wie das Festlegen des Werts einer Variablen oder das Einfügen eines Werts in eine Spalte zu dem Datentyp, der durch die Variablendeklaration oder Spaltendefinition definiert wurde.
  • Bei Vergleichsoperatoren oder anderen Ausdrücken hängt der sich ergebende Datentyp von den Regeln der Datentyprangfolge ab.

Für einige Datentypen hängt das Ergebnis davon ab, wie der Datentyp deklariert wird:

  • Dezimal und numerisch: Die Datenbank-Engine behandelt jede Kombination aus Präzision und Skalierung als einen anderen Datentyp. Die Umwandlung zwischen ihnen kann implizit sein. Ein Wert mit mehr Dezimalstellen als die Zielskala wird fehlerfrei gerundet. Ein Wert, der für die Zielgenauigkeit zu groß ist, verursacht den Fehler 8115, es sei denn ARITHABORT , und ANSI_WARNINGS sind beide OFF; dann ist NULLdas Ergebnis .
  • Du kannst varchar(max),nvarchar(max) und varbinary(max) nicht in sql_variant umwandeln.
  • Die Umwandlung zwischen verschiedenen benutzerdefinierten CLR-Typen ist nicht erlaubt.
  • Implizite Umwandlung wird zwischen untypisiertem XML und getyptem XML sowie zwischen typisierten XML-Werten unterstützt, die dieselbe XML-Schema-Sammlung und dieselbe DOCUMENT Facette CONTENT verwenden.
  • Die Umwandlung zwischen verschiedenen XML-Schema-Sammlungen oder zwischen verschiedenen DOCUMENT und CONTENT Facetten muss explizit erfolgen. Die Konvertierung zwischen einem benutzerdefinierten CLR-Typ und einem getippten XML ist nicht erlaubt.
  • Die Umwandlung zwischen Vektorwerten ist nur erlaubt, wenn die Maße und der Basistyp (float32 oder float16) gleich sind.

Eine Konvertierung, die im Diagramm als erlaubt angezeigt wird, kann dennoch für einen bestimmten Wert scheitern, zum Beispiel für eine Zeichenkette, die nicht gültig ist, oder für einen Vektor mit einer anderen Anzahl von Dimensionen. Werte der Datentypen Bild, ntext, Text, xml, Geographie, Geometrie, JSON und Vektor können nicht mit dem Operator gleich (=)) verglichen werden, selbst wenn beide Werte denselben Datentyp haben.

Tipp

Ein praktisches Beispiel für die Auswirkungen der Datentyprangfolge in Konvertierungen finden Sie weiter unten in diesem Abschnitt.

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. Beispielsweise -08:00.

Die Datentypen nchar und nvarchar speichern Unicode-Daten in der UTF-16-Codierung, die immer eine gerade Anzahl von Bytes verwendet. Sei vorsichtig, wenn du Binär- oder Varbinär-Werte in oder von nchar oder nvarchar konvertierst. Zum Beispiel liefert die folgende Umrechnung keinen hexadezimalen Wert von 41. Es gibt einen hexadezimalen Wert von :4100

SELECT CAST (CAST (0x41 AS NVARCHAR) AS VARBINARY);

Weitere Informationen finden Sie unter Sortierungs- und Unicode-Support.

Datentypen mit umfangreichen Werten

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. Beachten Sie jedoch folgende Richtlinien:

  • 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.
  • 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.
  • Die Konvertierung von nvarchar, varbinary oder varchar in einen entsprechenden kleineren Datentyp erfolgt implizit.
  • Die Konvertierung vom sql_variant-Datentyp in einen Datentyp mit hohen Werten ist eine explizite Konvertierung.
  • Datentypen mit hohen Werten können nicht in den sql_variant-Datentyp konvertiert werden.

Für weitere Informationen zur Konvertierung vom XML-Datentyp siehe Instanzen von XML-Daten erstellen.

xml-Datentyp

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. Informationen zu diesen Regeln finden Sie unter Definiere die Serialisierung von XML-Daten. Informationen zur Konvertierung von anderen Datentypen zum XML-Datentyp finden Sie unter Erstellen von XML-Daten-Instanzen.

text- und image-Datentyp

Die automatische Datentypkonvertierung wird für die Datentypen text und image nicht unterstützt. 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. Wenn Sie eine falsche Konvertierung versuchen, zum Beispiel einen Zeichenausdruck mit Buchstaben in eine int umzuwandeln, liefert die Datenbank-Engine eine Fehlermeldung.

Ausgabesortierung

Wenn die CAST- oder die CONVERT-Funktionen eine Zeichenfolge ausgeben und eine Zeichenfolgeneingabe empfangen, hat die Ausgabe dieselbe Sortierung und Sortierungsbezeichnung wie die Eingabe. Wenn die Eingabe keine Zeichenfolge ist, hat die Ausgabe die Standardsortierung der Datenbank und die Sortierungsbezeichnung „coercible-default“ (Standard erzwingbar). Weitere Informationen finden Sie unter Rangfolge der Sortierungen.

Um der Ausgabe eine andere Kollation zuzuweisen, wendet die Klausel COLLATE auf den Ergebnisausdruck der CAST oder-Funktion CONVERT an. Beispiel:

SELECT CAST ('abc' AS VARCHAR (5)) COLLATE French_CS_AS;

Abschneiden und Runden von Ergebnissen

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. Diese Fälle treten auf, wenn das Ergebnis zu kurz zum Anzeigen ist. Konvertierungen in binary, char, nchar, nvarchar, varbinary oder varchar werden abgeschnitten, mit Ausnahme der in der folgenden Tabelle aufgelisteten Konvertierungen.

Ausgangsdatentyp Zieldatentyp Ergebnis
int, smallint oder tinyint verkohlen
varchar
Zu kurz zum Anzeigen

nvarchar
Fehler 1
money, smallmoney, numeric, decimal, float oder real verkohlen
varchar
Fehler 1

nvarchar
Fehler 1

1 Es wird ein Fehler zurückgegeben, da die Ergebnislänge zu kurz ist, um angezeigt zu werden.

Die SQL Server-Datenbank-Engine garantiert, dass nur Roundtrip-Konvertierungen, also Konvertierungen, die einen Datentyp vom ursprünglichen Datentyp und wieder zurück konvertieren, von Version zu Version dieselben Werte liefern. Im folgenden Beispiel wird eine solche Hin- und Rückkonvertierung veranschaulicht:

DECLARE @myval AS 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));
GO

Warnung

Erstellen Sie keine binary-Werte, um sie anschließend in einen Datentyp der numerischen Datentypkategorie zu konvertieren. Die Datenbank-Engine garantiert nicht, dass das Ergebnis einer dezimalen oder numerischen Datentyp-Umwandlung in Binärform zwischen Versionen von SQL Server identisch ist.

Im folgenden Beispiel ist der resultierende Ausdruck zu klein, um angezeigt zu werden.

USE AdventureWorks2025;
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 AS e
     INNER JOIN Person.Person AS p
         ON e.BusinessEntityID = p.BusinessEntityID
WHERE NOT e.BusinessEntityID > 5;
GO

Hier sehen Sie das Ergebnis.

FirstName   LastName      Title   Sick Leave
---------   ------------- ------- --------`
Ken         Sanchez       NULL   *
Terri       Duffy         NULL   *
Roberto     Tamburello    NULL   *
Rob         Walters       NULL   *
Gail        Erickson      Ms.    *

Wenn man Datentypen umwandelt, die sich in Dezimalstellen unterscheiden, liefert die Datenbank-Engine manchmal einen abgeschnittenen Ergebniswert, und zu anderen Zeiten einen gerundeten Wert. In dieser Tabelle wird das Verhaltensmuster veranschaulicht.

Von Bis Verhalten
numerisch numerisch Rund
numerisch Int Kürzen
numerisch Geld Rund
Geld Int Rund
Geld numerisch Rund
schweben Int Kürzen
schweben numerisch Runde 1
schweben datetime Rund
datetime Int Rund

1 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. Alle Werte mit einer Genauigkeit von mehr als 17 Stellen werden auf Null gerundet.

Zum Beispiel könnten die Werte 10,6496 und -10,6496 bei der Umwandlung in int- oder numerische Typen abgeschnitten oder gerundet werden:

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:

abschneiden1 abgeschnitten2 round1 round2
10 -10 11 -11

Falls eine Konvertierung von Datentypen vorgenommen wird, bei der der Zieldatentyp weniger Dezimalstellen aufweist als der Quelldatentyp, wird der Wert gerundet. Bei dieser Konvertierung wird beispielsweise $10.3497 zurückgegeben:

SELECT CAST (10.3496847 AS MONEY);

Die Datenbank-Engine liefert eine Fehlermeldung, wenn nicht-numerische Char-, nchar-, nvarchar- oder varchar-Daten in Dezimal-, Float-, int- und numerische umgewandelt werden. Die Datenbank-Engine liefert außerdem einen Fehler, wenn eine leere Zeichenkette ( ) in numerisch oder dezimal umgewandelt wird.

Bestimmte datetime-Konvertierungen sind nicht deterministisch

Dies sind die Formate, bei denen die Konvertierung von „string“ in „datetime“ nicht deterministisch ist:

  • Alle Stile unter 1001
  • 106
  • 107
  • 109
  • 113
  • 130

1 Mit Ausnahme der Stile 20 und 21

Weitere Informationen finden Sie unter Nicht deterministische Konvertierung von Datumsliteralzeichenfolgen in DATE-Werte.

Ergänzende Zeichen (Ersatzpaare)

Wenn Sie in Versionen ab 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. Stattdessen wird er vor dem ergänzenden Zeichen abgeschnitten. Im folgenden Codefragment wird @x z. B. weggelassen, sodass nur ab erhalten bleibt. Es ist nicht genügend Platz für das ergänzende Zeichen vorhanden.

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

SELECT CAST (@x AS NVARCHAR (3));

Bei SC-Sortierungen entspricht das Verhalten von CONVERT dem von CAST. Weitere Informationen finden Sie im Abschnitt zu zusätzlichen Zeichen im Artikel Unicode-Unterstützung und Unterstützung von Sortierungen.

Kompatibilitätsunterstützung

In früheren Versionen von SQL Server lautet 121der Standard-Stil für CAST und Operationen CONVERT auf Zeit- und Datetime2-Datentypen , außer wenn einer der beiden Typen in einer berechneten Spaltenausdruck verwendet wird. Für berechnete Spalten ist 0der Standardstil . Dieses Verhalten wirkt sich auf berechnete Spalten aus, wenn sie erstellt werden, werden in Abfragen mit Autoparameterisierung verwendet oder in Constraint-Definitionen eingesetzt.

Auf Kompatibilitätsniveau110 und höher haben 121 die CAST und Operationen CONVERT auf den Datentypen time und datetime2 immer den Standardstil. Wenn eine Abfrage auf dem alten Verhalten basiert, verwenden Sie ein Kompatibilitätsniveau kleiner als 110, oder geben Sie explizit den 0 Stil in der betroffenen Abfrage an.

Wert des Kompatibilitätsgrads Standardformatvorlage für CAST und CONVERT1 Standardformat für berechnete Spalte
< 110 121 0
>= 110 121 121

1 Gilt nicht für berechnete Spalten

Ein Upgrade der Datenbank auf Kompatibilitätsniveau 110 oder höher ändert keine Nutzerdaten, die auf der Festplatte gespeichert wurden. Sie müssen diese Daten entsprechend manuell korrigieren. Wenn Sie SELECT INTO zum Beispiel eine Tabelle aus einer Quelle erstellen, die einen oben beschriebenen berechneten Spaltenausdruck enthält, würden die Daten (mit Style 0) gespeichert, anstatt die berechnete Spaltendefinition selbst. Sie müssen diese Daten manuell aktualisieren, um den Stil 121anzupassen.

Beispiele

Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025, AdventureWorksDW2025, oder AdventureWorksLT2025 Beispieldatenbank, die Sie aus dem Azure Data SQL Samples Repository GitHub-Repository herunterladen können.

Ein. Verwenden von CAST und 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.

Verwenden Sie CAST:

USE AdventureWorks2025;
GO

SELECT SUBSTRING(Name, 1, 30) AS ProductName,
       ListPrice
FROM Production.Product
WHERE CAST (ListPrice AS INT) LIKE '33%';
GO

Verwenden Sie CONVERT:

USE AdventureWorks2025;
GO

SELECT SUBSTRING(Name, 1, 30) AS ProductName,
       ListPrice
FROM Production.Product
WHERE CONVERT (INT, ListPrice) LIKE '33%';
GO

Hier sehen Sie das Ergebnis. Das Beispielresultset ist bei CAST und CONVERT identisch.

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

B. Verwenden von CAST mit arithmetischen Operatoren

Im folgenden Beispiel wird eine einzelne Spalte (Computed) berechnet. Hierbei wird der Gesamtumsatz des laufenden Jahres (SalesYTD) durch den Prozentsatz der Umsatzbeteiligung (CommissionPCT) geteilt. Dieser Wert wird auf die nächste ganze Zahl gerundet und anschließend mithilfe von CAST in einen int-Datentyp konvertiert.

USE AdventureWorks2025;
GO

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

Hier sehen Sie das Ergebnis.

Computed
------
379753754
346698349
257144242
176493899
281101272
0
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107

C. Verwenden von CAST zur Verkettung

Im folgenden Beispiel werden nicht auf Zeichen basierende Ausdrücke mithilfe von CAST verkettet. Verwendet wird die Datenbank AdventureWorksDW2025.

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

Hier sehen Sie das Ergebnis.

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: Verwenden von CAST zur Generierung besser lesbaren Texts

Dieses Beispiel verwendet CAST in der SELECT Liste, um die Spalte Name in eine Spalte character(10) umzuwandeln. Verwendet wird die Datenbank AdventureWorksDW2025.

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

Hier sehen Sie das Ergebnis.

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

E. Verwenden von CAST mit der LIKE-Klausel

In diesem Beispiel werden die money-Werte der Spalte SalesYTD in den Datentyp int und anschließend in den Datentyp char(20) konvertiert, damit sie mit der LIKE-Klausel verwendet werden können.

USE AdventureWorks2025;
GO

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

Hier sehen Sie das Ergebnis.

FirstName        LastName            SalesYTD         BusinessEntityID
---------------- ------------------- ---------------- -------------
Tsvi             Reiter              2811012.7151      279
Syed             Abbas               219088.8836       288
Rachel           Valdez              2241204.0424      289

F. Verwenden von CONVERT oder CAST mit typisierten XML-Daten

Diese Beispiele zeigen die Verwendung von zur Umwandlung von CONVERT Daten in getypte XML-Dateien unter Verwendung des XML-Datentyps und der Spalten (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:

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.

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

In diesem Beispiel wird eine aus Leerzeichen, Text und Markup bestehende Zeichenfolge in typisierte XML-Daten umgewandelt:

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

Weitere Beispiele finden Sie unter Erstellen von XML-Daten .

G. Verwenden von CAST und CONVERT mit datetime-Daten

Im folgenden Beispiel werden zuerst GETDATE()-Werte verwendet, um das aktuelle Datum und die aktuelle Uhrzeit darzustellen. 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.

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

Hier sehen Sie das Ergebnis.

UnconvertedDateTime     UsingCast              UsingConvertTo_ISO8601
----------------------- ---------------------- ------------------------------
2022-04-18 09:58:04.570 Apr 18 2022  9:58AM    2022-04-18T09:58:04.570

Das folgende Beispiel entspricht in etwa der Umkehrung des vorherigen Beispiels. 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.

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

Hier sehen Sie das Ergebnis.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2006-04-25T15:50:59.997 2006-04-25 15:50:59.997 2006-04-25 15:50:59.997

H. Verwenden von CONVERT mit Binär- und Zeichendaten

Die folgenden Beispiele zeigen die Ergebnisse der Konvertierung von Binär- und Zeichendaten mit verschiedenen Formaten.

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

Hier sehen Sie das Ergebnis.

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

Dieses Beispiel zeigt, dass Style 1 eine Ergebnistrunkierung erzwingen kann. Die Zeichen 0x in der Ergebnismenge erzwingen die Abkürzung.

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

Hier sehen Sie das Ergebnis.

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

Dieses Beispiel zeigt, dass Style das Ergebnis 2 nicht abschneidet, weil das Ergebnis die Zeichen 0xnicht enthält.

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

Hier sehen Sie das Ergebnis.

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

Konvertiere den Zeichenwert Name in einen Binärwert.

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

Hier sehen Sie das Ergebnis.

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

Hier sehen Sie das Ergebnis.

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

Hier sehen Sie das Ergebnis.

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

Ich. Konvertieren von date- und time-Datentypen

Das folgende Beispiel zeigt die Konvertierung von date-, time- und datetime-Datentypen.

DECLARE @d1 AS DATE,
        @t1 AS TIME,
        @dt1 AS 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];

Stellen Sie sicher, dass die Werte innerhalb eines kompatiblen Bereichs liegen, wenn Sie eine Konvertierung von date in datetime oder datetime2 in Betracht ziehen. Der minimale Jahreswert für datetime ist 1753, während der minimale Jahreswert für 0001 und datetime2 beträgt.

DECLARE @d1 AS DATE,
        @dt1 AS DATETIME,
        @dt2 AS DATETIME2;

SET @d1 = '1492-08-03';
--This is okay; Minimum YYYY for DATE is 0001

SET @dt2 = CAST (@d1 AS DATETIME2);
--This is okay; Minimum YYYY for DATETIME2 IS 0001

SET @dt1 = CAST (@d1 AS DATETIME);
--This returns an error with (Msg 242) "The conversion of a date data type to a datetime data type resulted in an out-of-range value."
--Minimum YYYY for DATETIME is 1753

J. Verwenden von CONVERT mit datetime-Daten in unterschiedlichen Formaten

Im folgenden Beispiel werden zuerst GETDATE()-Werte verwendet. CONVERT wird verwendet, um alle Datums- und Uhrzeitformate anzuzeigen, die sich im Abschnitt Datums- und Uhrzeitformate dieses Artikels befinden.

Formatnummer Beispielabfrage Beispielergebnis
0 SELECT CONVERT(NVARCHAR, GETDATE(), 0) 23. August 2019 1:39 Pm
1 SELECT CONVERT(NVARCHAR, GETDATE(), 1) 08/23/19
2 SELECT CONVERT(NVARCHAR, GETDATE(), 2) 19.08.23
3 SELECT CONVERT(NVARCHAR, GETDATE(), 3) 23/08/19
4 SELECT CONVERT(NVARCHAR, GETDATE(), 4) 23.08.19
5 SELECT CONVERT(NVARCHAR, GETDATE(), 5) 23-08-19
6 SELECT CONVERT(NVARCHAR, GETDATE(), 6) 23 Aug 19
7 SELECT CONVERT(NVARCHAR, GETDATE(), 7) Aug 23, 19
8 oder 24 oder 108 SELECT CONVERT(NVARCHAR, GETDATE(), 8) 13:39:17
9 oder 109 SELECT CONVERT(NVARCHAR, GETDATE(), 9) 23. August 2019 1:39:17:090 Uhr
10 SELECT CONVERT(NVARCHAR, GETDATE(), 10) 08-23-19
11 SELECT CONVERT(NVARCHAR, GETDATE(), 11) 19/08/23
12 SELECT CONVERT(NVARCHAR, GETDATE(), 12) 190823
13 oder 113 SELECT CONVERT(NVARCHAR, GETDATE(), 13) 23 Aug 2019 13:39:17:090
14 oder 114 SELECT CONVERT(NVARCHAR, GETDATE(), 14) 13:39:17:090
20 oder 120 SELECT CONVERT(NVARCHAR, GETDATE(), 20) 2019-08-23 13:39:17
21 oder 25 oder 121 SELECT CONVERT(NVARCHAR, GETDATE(), 21) 2019-08-23 13:39:17.090
22 SELECT CONVERT(NVARCHAR, GETDATE(), 22) 23.08.19 13:39:17 Uhr
23 SELECT CONVERT(NVARCHAR, GETDATE(), 23) 2019-08-23
101 SELECT CONVERT(NVARCHAR, GETDATE(), 101) 08/23/2019
102 SELECT CONVERT(NVARCHAR, GETDATE(), 102) 2019.08.23
103 SELECT CONVERT(NVARCHAR, GETDATE(), 103) 23/08/2019
104 SELECT CONVERT(NVARCHAR, GETDATE(), 104) 23.08.2019
105 SELECT CONVERT(NVARCHAR, GETDATE(), 105) 23-08-2019
106 SELECT CONVERT(NVARCHAR, GETDATE(), 106) 23 Aug 2019
107 SELECT CONVERT(NVARCHAR, GETDATE(), 107) 23. August 2019
110 SELECT CONVERT(NVARCHAR, GETDATE(), 110) 08-23-2019
111 SELECT CONVERT(NVARCHAR, GETDATE(), 111) 2019/08/23
112 SELECT CONVERT(NVARCHAR, GETDATE(), 112) 20190823
113 SELECT CONVERT(NVARCHAR, GETDATE(), 113) 23 Aug 2019 13:39:17.090
120 SELECT CONVERT(NVARCHAR, GETDATE(), 120) 2019-08-23 13:39:17
121 SELECT CONVERT(NVARCHAR, GETDATE(), 121) 2019-08-23 13:39:17.090
126 SELECT CONVERT(NVARCHAR, GETDATE(), 126) 2019-08-23T13:39:17.09
127 SELECT CONVERT(NVARCHAR, GETDATE(), 127) 2019-08-23T13:39:17.09
130 SELECT CONVERT(NVARCHAR, GETDATE(), 130) 22 ذو الحجو 1440 1:39:17.090P
131 SELECT CONVERT(NVARCHAR, GETDATE(), 131) 22.12.1440 1:39:17.090 Uhr

K. Auswirkungen der Datentyprangfolge in zulässigen Konvertierungen

Im folgenden Beispiel wird eine Variable des Typs varchar(10) definiert. Dieser wird dann ein Integerwert zugewiesen. Anschließend wird eine SELECT-Anweisung für die Verkettung der Variablen mit einer Zeichenfolge ausgeführt.

DECLARE @string AS VARCHAR (10);
SET @string = 1;

SELECT @string + ' is a string.' AS Result;

Hier sehen Sie das Ergebnis.

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

Der int-Wert 1 wurde in den Typ varchar konvertiert.

Im folgenden Beispiel wird eine ähnliche Abfrage gezeigt, in der jedoch eine int-Variable verwendet wird:

DECLARE @notastring AS INT;
SET @notastring = '1';

SELECT @notastring + ' is not a string.' AS Result;

In diesem Fall löst die SELECT-Anweisung den folgenden Fehler aus:

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

Um den Ausdruck @notastring + ' is not a string.'zu evaluieren, muss die Datenbank-Engine die Regeln der Datentypprärangenz befolgen, um die implizite Umwandlung abzuschließen, bevor das Ergebnis des Ausdrucks berechnet werden kann. Da int eine höhere Priorität als varchar hat, versucht die Datenbank-Engine, die Zeichenkette in eine ganze Zahl umzuwandeln, scheitert, weil diese Zeichenkette nicht in eine ganze Zahl umgewandelt werden kann.

Wenn wir eine Zeichenkette angeben, die konvertiert werden kann, gelingt die Aussage, wie im folgenden Beispiel zu sehen ist:

DECLARE @notastring AS INT;
SET @notastring = '1';

SELECT @notastring + '1';

In diesem Fall kann die Zeichenfolge '1' in den Integerwert 1 konvertiert werden, sodass diese SELECT-Anweisung den Wert 2 zurückgibt. Wenn die angegebenen Datentypen ganze Zahlen sind, wird der + Operator zum additiven mathematischen Operator und nicht zu einer Zeichenkettenverkettung.

Beispiele: Azure Synapse Analytics

L. Verwenden von CAST und 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. Verwendet wird die Datenbank AdventureWorksDW2025.

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

Dieses Beispiel zeigt dieselbe Abfrage mit CONVERT anstatt CAST. Verwendet wird die Datenbank AdventureWorksDW2025.

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

M. Verwenden von CAST mit arithmetischen Operatoren

Im folgenden Beispiel wird eine einzelne Spalte berechnet. Hierbei wird der Einzelpreis des Produkts (UnitPrice) durch den Prozentsatz für den Abzug (UnitPriceDiscountPct) geteilt. Dieses Ergebnis wird in einen int-Datentyp konvertiert, nachdem es auf die nächste ganze Zahl gerundet wurde. In diesem Beispiel wird die AdventureWorksDW2025-Datenbank verwendet.

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

Hier sehen Sie das Ergebnis.

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. Verwenden von CAST mit der LIKE-Klausel

Dieses Beispiel wandelt die GeldspalteListPrice in einen int-Typ um und dann in einen char(20)- Typ, sodass die Klausel LIKE sie verwenden kann. In diesem Beispiel wird die AdventureWorksDW2025-Datenbank verwendet.

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

O. Verwenden von CAST und CONVERT mit datetime-Daten

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. In diesem Beispiel wird die AdventureWorksDW2025-Datenbank verwendet.

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

Hier sehen Sie das Ergebnis.

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. 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. In diesem Beispiel wird die AdventureWorksDW2025-Datenbank verwendet.

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;

Hier sehen Sie das Ergebnis.

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