Arbeiten mit Datentypen

Abgeschlossen

In Transact-SQL verwendete Spalten und Variablen haben jeweils einen Datentyp. 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

Date/Time

Binary

Sonstiges

TINYINT

float

char

date

BINARY

cursor

SMALLINT

real

varchar

time

varbinary

hierarchyid

INT

text

datetime

image

sql_variant

BIGINT

NCHAR

datetime2

table

bit

NVARCHAR

smalldatetime

timestamp

decimal/numeric

ntext

datetimeoffset

UNIQUEIDENTIFIER

NUMERIC

Xml

money

geography

SMALLMONEY

Geometrie

Hinweis

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

Datentypkonvertierung

Werte kompatibler Datentypen können bei Bedarf implizit konvertiert werden. Angenommen beispielsweise, Sie können mithilfe des Operators + einer + eine ganzzahlige Zahl hinzufügen oder einen char-Wert fester Länge und einen varchar-Wert variabler Länge miteinander verketten. In einigen Fällen müssen Sie Werte jedoch möglicherweise aus einem Datentyp explizit in einen anderen konvertieren. So führt z. B. der Versuch, einen varchar-Wert mithilfe von + mit einem decimalWert (Dezimalwert) zu verketten, zu einem Fehler – sofern Sie nicht zuerst den numerischen Wert in einen kompatiblen Zeichenfolgendatentyp konvertieren.

Hinweis

Implizite und explizite Konvertierungen gelten für bestimmte Datentypen, und einige Konvertierungen sind nicht möglich. Weitere Informationen finden Sie in dem Diagramm in der Referenzdokumentation zu Transact-SQL.

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 beispielsweise „CAST“ zum Konvertieren der ganzzahligen Werte in der Spalte ProductID in varchar-Werte (mit maximal 4 Zeichen), 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:

ProductName

680: HL Road Frame – Black, 58

706: HL Road Frame – Red, 58

707: Sport-100 Helmet, Red

708: Sport-100 Helmet, Black

...

Nehmen wir jedoch an, dass die Spalte Size in der Tabelle Production.Product eine Spalte vom Typ nvarchar (variable Länge, Unicode-Textdaten) ist, 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 der Werte in der Spalte numerisch sind, möchten Sie diese Werte möglicherweise 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. Auf diese Weise wird angegeben, dass ein Wert unbekannt ist.

Hinweis

Später in dieser Lerneinheit werden Sie Überlegungen zur Behandlung von NULL-Werten erkunden.

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:

ProductName

680: HL Road Frame – Black, 58

706: HL Road Frame – Red, 58

707: Sport-100 Helmet, Red

708: Sport-100 Helmet, Black

...

Wie „CAST“ umfasst „CONVERT“ eine „TRY_CONVERT“-Variante, die bei inkompatiblen Werten NULL 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:

SellStartDate

StartDate

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 style-Formatierungscodes, die Sie bei CONVERT verwenden können, finden Sie in der Referenzdokumentation zu Transact-SQL.

„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 bei „CAST“ und „CONVERT“ gibt es bei „PARSE“ eine „TRY_PARSE“-Variante, die inkompatible Werte als NULLzurü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. Informationen, um dieses Konzept der Genauigkeit und Skalierung besser zu verstehen, finden Sie in der Referenzdokumentation zu Transact-SQL.

STR

Die Funktion „STR“ konvertiert einen numerischen Wert in einen varchar-Wert.

Beispiel:

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

Die Ergebnisse würden ungefähr so aussehen:

ProductID

Preis

680

1.432,00 $

706

1.432,00 $

707

35,00 $

...

...