Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Funktionsweise von CAST() in SQL Server

In SQL Server der CAST() Funktion konvertiert einen Ausdruck eines Datentyps in einen anderen.

Hier ist ein kurzer Überblick über die Funktion mit Beispielen.

Syntax

Die Syntax lautet wie folgt:

CAST ( expression AS data_type [ ( length ) ] )  

Wobei expression ist der zu konvertierende Ausdruck data_type ist der neue Datentyp und length ist eine optionale Länge für den neuen Datentyp.

Beispiel

Hier ist ein Beispiel für das Casting einer Zeichenfolge als Dezimalzahl:

SELECT CAST('007' AS DECIMAL(5,2));

Ergebnis:

7.00

String bis heute

Hier ist ein Beispiel für die Umwandlung einer Zeichenfolge in ein Datum:

SELECT CAST('09 Feb 2030' AS date);

Ergebnis:

2030-02-09

In diesem Fall der CAST() -Funktion konnte feststellen, welche Datumsteile welche sind, weil ich das Datum in einem Format bereitgestellt habe, das sie erkennt.

Das Übergeben eines Werts, der nicht als Datum umgewandelt werden kann, führt zu einem Fehler:

SELECT CAST('Next Xmas' AS date);

Ergebnis:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

Gebietsschema

Die Sprache der aktuellen Sitzung kann einen Unterschied bei der Interpretation von Datumsangaben machen.

Folgendes passiert bei Verwendung der britischen Sprache:

SET LANGUAGE British;
SELECT CAST('09/02/2030' AS date);

Ergebnis:

2030-02-09

In diesem Fall wurde das Datum als der 9. Februar interpretiert.

Ändern wir die Sprache zu us_English :

SET LANGUAGE us_English;
SELECT CAST('09/02/2030' AS date);

Ergebnis:

2030-09-02

Diesmal interpretierte es das Datum als den zweiten Septembertag.

String-Verkettung

Hier ist ein Beispiel für das Umwandeln eines numerischen Werts in einen String, um den Wert mit einem String zu verketten:

SELECT 'Likes: ' + CAST(178 AS VARCHAR(10));

Ergebnis:

Likes: 178

Folgendes passiert, wenn wir es nicht übertragen:

SELECT 'Likes: ' + 178;

Ergebnis:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Likes: ' to data type int.

Beim Versuch, zwei Werte mit unterschiedlichen Datentypen zu verketten, muss SQL Server einen der Werte implizit konvertieren, um den Datentyp des anderen zu verwenden, sodass beide denselben Datentyp haben, bevor die Verkettung durchgeführt werden kann. Es folgt den Regeln der Datentyppriorität, um diese Konvertierung durchzuführen.

In SQL Server ist der INT Datentyp hat eine höhere Priorität als VARCHAR .

Daher versucht SQL Server im obigen Beispiel, die Zeichenfolge in eine ganze Zahl zu konvertieren. Dies schlägt jedoch fehl, da der String nicht in eine Ganzzahl umgewandelt werden kann.

Abschneiden von Text

Ein praktischer kleiner Trick, den wir mit CAST() ausführen können Funktion besteht darin, längere Zeichenfolgen auf eine besser lesbare Länge zu kürzen.

Hier ist ein Beispiel für das Abschneiden von Text, der aus einer Datenbanktabelle ausgewählt wurde:

SELECT
    ProductName,
    CAST(ProductName AS VARCHAR(20)) AS Truncated
FROM Products;

Ergebnis:

+---------------------------------+----------------------+
| ProductName                     | Truncated            |
|---------------------------------+----------------------|
| Left handed screwdriver         | Left handed screwdri |
| Long Weight (blue)              | Long Weight (blue)   |
| Long Weight (green)             | Long Weight (green)  |
| Sledge Hammer                   | Sledge Hammer        |
| Chainsaw                        | Chainsaw             |
| Straw Dog Box                   | Straw Dog Box        |
| Bottomless Coffee Mugs (4 Pack) | Bottomless Coffee Mu |
| Right handed screwdriver        | Right handed screwdr |
+---------------------------------+----------------------+

Weitere Informationen

Der CAST() funktioniert ähnlich wie CONVERT() Funktion, und viele Datenkonvertierungen können mit beiden durchgeführt werden. Allerdings gibt es Unterschiede zwischen ihnen.

Siehe die Microsoft-Dokumentation für CAST() und CONVERT() für detailliertere Informationen zur Verwendung dieser Funktion.