Arbeiten mit Datentypen

Abgeschlossen

Spalten und Variablen, die in Transact-SQL verwendet werden, weisen jeweils einen Datentyp auf. Das Verhalten von Werten in Ausdrücken ist abhängig vom Datentyp der Spalte oder der Variablen, auf die verwiesen wird. Wie Sie zuvor gesehen haben, können Sie beispielsweise mithilfe des Operators + zwei Zeichenfolgenwerte verketten oder zwei numerische Werte hinzufügen.

Die folgende Tabelle zeigt allgemeine Datentypen, die in einer SQL Server-Datenbank unterstützt werden.

Exakter numerischer Wert

Ungefährer numerischer Wert

Zeichen

Datum/Uhrzeit

Binär

Sonstiges

TINYINT

Schweben

char

Datum

BINARY

Cursor

SMALLINT

real

varchar

time

varbinary

hierarchyid

INT

Text

Datum/Uhrzeit

Bild

sql_variant

BIGINT

NCHAR

datetime2

Tisch

bit

NVARCHAR

smalldatetime

Zeitstempel

decimal/numeric

ntext

datetimeoffset

UNIQUEIDENTIFIER

NUMERIC

Xml

Geld

Geografie

SMALLMONEY

Geometrie

Hinweis

Weitere Informationen zu den verschiedenen Datentypen und ihren Attributen finden Sie in der Transact-SQL Referenzdokumentation.

Datentypkonvertierung

Werte kompatibler Datentypen können bei Bedarf implizit konvertiert werden. Angenommen, Sie können den + Operator verwenden, um einer Dezimalzahl eine ganze Zahl hinzuzufügen, oder um einen Zeichenwert mit fester Länge und einen Variablenlängen-Varcharwert zu verketten. In einigen Fällen müssen Sie jedoch Werte explizit von einem Datentyp in einen anderen konvertieren. Zum Beispiel führt der Versuch, mit + einen Varchar-Wert mit einem Dezimal-Wert zu verketten, zu einem Fehler, es sei denn, Sie konvertieren den numerischen Wert zuerst in einen kompatiblen Zeichenfolgendatentyp.

Hinweis

Implizite und explizite Konvertierungen gelten für bestimmte Datentypen, und einige Konvertierungen sind nicht möglich. Für weitere Informationen verwenden Sie das Diagramm in der Transact-SQL Referenzdokumentation.

T-SQL enthält Funktionen, die Sie bei der expliziten Konvertierung zwischen Datentypen unterstützen sollen:

„CAST“ und „TRY_CAST“

Die Funktion „CAST“ konvertiert einen Wert in einen angegebenen Datentyp, wenn der Wert mit dem Zieldatentyp kompatibel ist. Bei Inkompatibilität wird ein Fehler zurückgegeben.

Die folgende Abfrage verwendet z. B. CAST, um die ganzzahligen Werte in der Spalte "ProductID " in Varchar-Werte (mit maximal 4 Zeichen) zu konvertieren, um sie mit einem anderen zeichenbasierten Wert zu verketten:

SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;

Das mögliche Ergebnis dieser Abfrage könnte ungefähr so aussehen:

Produktname

680: HL Road Frame – Black, 58

706: HL Road Frame – Red, 58

707: Sport-100 Helm, Rot

708: Sport-100 Helm, Schwarz

...

Nehmen wir jedoch an, die Spalte Größe in der Tabelle Production.Product ist eine nvarchar-Spalte mit variabler Länge, die einige numerische Größen (z. B. 58) und einige textbasierte Größen (z. B. "S", "M" oder "L") enthält. Die folgende Abfrage versucht, Werte aus dieser Spalte in einen ganzzahligen Datentyp zu konvertieren:

SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;

Diese Abfrage führt zu folgender Fehlermeldung:

Fehler: „Fehler beim Konvertieren des nvarchar-Werts ‚M‘ in den Datentyp ‚int‘.“

Da mindestens einige Werte in der Spalte numerisch sind, sollten Sie diese Werte konvertieren und die anderen ignorieren. Sie können Datentypen mithilfe der „TRY_CAST“-Funktion konvertieren.

SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;

Die Ergebnisse könnten jetzt so aussehen:

NumericSize

58

58

NULL

NULL

...

Die Werte, die in einen numerischen Datentyp konvertiert werden können, werden als Dezimalwerte zurückgegeben, und die inkompatiblen Werte werden als NULL zurückgegeben, was verwendet wird, um anzugeben, dass ein Wert unbekannt ist.

Hinweis

Wir werden Überlegungen zur Behandlung von NULL-Werten weiter unten in dieser Einheit untersuchen.

CONVERT und TRY_CONVERT

„CAST“ ist die SQL-Funktion (nach ANSI-Standard) zum Konvertieren zwischen Datentypen und wird in vielen Datenbanksystemen verwendet. In Transact-SQL können Sie auch die Funktion „CONVERT“ verwenden, wie hier gezeigt wird:

SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;

Erneut gibt diese Abfrage den in den angegebenen Datentyp konvertierten Wert wie den folgenden zurück:

Produktname

680: HL Road Frame – Black, 58

706: HL Road Frame – Red, 58

707: Sport-100 Helm, Rot

708: Sport-100 Helm, Schwarz

...

Wie CAST weist CONVERT eine TRY_CONVERT Variante auf, die NULL für inkompatible Werte zurückgibt.

Ein weiterer Vorteil der Verwendung von CONVERT gegenüber CAST ist, dass CONVERT einen Parameter enthält, mit dem Sie beim Konvertieren von numerischen Werten und Datumswerten in Zeichenfolgen einen Formatstil („style“) angeben können. Betrachten Sie beispielsweise die folgende Abfrage:

SELECT SellStartDate,
       CONVERT(varchar(20), SellStartDate) AS StartDate,
       CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate 
FROM SalesLT.Product;

Die Ergebnisse dieser Abfrage könnten ungefähr so aussehen:

Verkaufsstartdatum

Startdatum

FormattedStartDate

01.06.2002T00:00:00.0000000

1. Juni 2002 12:00AM

01.06.2002

01.06.2002T00:00:00.0000000

1. Juni 2002 12:00AM

01.06.2002

01.07.2005T00:00:00.0000000

1. Juli 2005 12:00AM

1.7.2005

01.07.2005T00:00:00.0000000

1. Juli 2005 12:00AM

1.7.2005

...

...

...

Hinweis

Weitere Informationen zu Formatierungscodes für Stilvorlagen, die Sie mit CONVERT verwenden können, können Sie in der Transact-SQL-Referenzdokumentation finden.

„PARSE“ und „TRY_PARSE“

Die Funktion „PARSE“ ist zum Konvertieren von formatierten Zeichenfolgen konzipiert, die numerische Werte oder Datums-/Uhrzeitwerte darstellen. Sehen Sie sich beispielsweise die folgende Abfrage an (die Literalwerte statt Werten aus Spalten in einer Tabelle verwendet):

SELECT PARSE('01/01/2021' AS date) AS DateValue,
   PARSE('$199.99' AS money) AS MoneyValue;

Die Ergebnisse dieser Abfrage sehen so aus:

DatWert

MoneyValue

01.01.2021T00:00:00.0000000

199,99

Ähnlich wie CAST und CONVERT verfügt PARSE über eine TRY_PARSE Variante, die inkompatible Werte als NULL zurückgibt.

Hinweis

Wenn Sie mit dezimalen oder numerischen Datentypen arbeiten, müssen Sie möglicherweise auf eine ganze Zahl runden oder das Dezimaltrennzeichen festlegen, was Sie über Genauigkeit (precision) und Skalierung (scale) erreichen. Um dieses Konzept der Genauigkeit und Skalierung besser zu verstehen, lesen Sie die Transact-SQL Referenzdokumentation.

STR

Die STR-Funktion konvertiert einen numerischen Wert in eine Varchar.

Beispiel:

SELECT ProductID,  '$' + STR(ListPrice) AS Price
FROM Production.Product;

Die Ergebnisse würden ungefähr so aussehen:

Produkt-ID

Preis

680

1.432,00 $

706

1.432,00 $

707

35,00 $

...

...