W SQL Server, CAST()
funkcja konwertuje wyrażenie jednego typu danych na inny.
Oto krótki przegląd funkcji z przykładami.
Składnia
Składnia wygląda tak:
CAST ( expression AS data_type [ ( length ) ] )
Gdzie expression
jest wyrażeniem do konwersji, data_type
to nowy typ danych, a length
to opcjonalna długość dla nowego typu danych.
Przykład
Oto przykład rzutowania łańcucha jako dziesiętnego:
SELECT CAST('007' AS DECIMAL(5,2));
Wynik:
7.00
Ciąg do daty
Oto przykład rzutowania ciągu na datę:
SELECT CAST('09 Feb 2030' AS date);
Wynik:
2030-02-09
W tym przypadku CAST()
funkcja była w stanie określić, które części daty są które, ponieważ podałem datę w formacie, który rozpoznaje.
Przekazanie wartości, której nie można rzutować jako daty, powoduje błąd:
SELECT CAST('Next Xmas' AS date);
Wynik:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Lokal
Język bieżącej sesji może mieć wpływ na interpretację dat.
Oto, co dzieje się podczas używania języka brytyjskiego:
SET LANGUAGE British;
SELECT CAST('09/02/2030' AS date);
Wynik:
2030-02-09
W tym przypadku data została zinterpretowana jako dziewiąty dzień lutego.
Zmieńmy język na us_English
:
SET LANGUAGE us_English;
SELECT CAST('09/02/2030' AS date);
Wynik:
2030-09-02
Tym razem zinterpretował datę jako drugi dzień września.
Konkatenacja ciągów
Oto przykład rzutowania wartości liczbowej na łańcuch w celu połączenia wartości z łańcuchem:
SELECT 'Likes: ' + CAST(178 AS VARCHAR(10));
Wynik:
Likes: 178
Oto, co się stanie, jeśli go nie przerzucimy:
SELECT 'Likes: ' + 178;
Wynik:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Likes: ' to data type int.
Próbując połączyć dwie wartości z różnymi typami danych, SQL Server musi niejawnie przekonwertować jedną z wartości, aby używała typu danych drugiej, tak aby obie miały ten sam typ danych, zanim będzie mógł wykonać połączenie. Konwersja odbywa się zgodnie z regułami pierwszeństwa typu danych.
W SQL Server INT
typ danych ma wyższy priorytet niż VARCHAR
.
Dlatego w powyższym przykładzie SQL Server próbuje przekonwertować ciąg na liczbę całkowitą. Ale to się nie udaje, ponieważ łańcuch nie może zostać przekonwertowany na liczbę całkowitą.
Obcinanie tekstu
Jedna poręczna sztuczka, którą możemy wykonać za pomocą CAST()
Funkcja polega na obcinaniu dłuższych łańcuchów do bardziej czytelnej długości.
Oto przykład obcinania tekstu wybranego z tabeli bazy danych:
SELECT
ProductName,
CAST(ProductName AS VARCHAR(20)) AS Truncated
FROM Products;
Wynik:
+---------------------------------+----------------------+ | 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 | +---------------------------------+----------------------+
Więcej informacji
CAST()
funkcja działa podobnie do CONVERT()
funkcji, a wiele konwersji danych można wykonać za pomocą jednej z nich. To powiedziawszy, istnieją między nimi różnice.
Zobacz dokumentację Microsoft dla CAST()
i CONVERT()
aby uzyskać bardziej szczegółowe informacje na temat korzystania z tej funkcji.