W SQL Server, CONVERT()
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:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Gdzie expression
jest wyrażeniem do konwersji, data_type
to nowy typ danych, a length
to opcjonalna długość dla nowego typu danych.
Opcjonalny style
argument może być użyty do określenia, jak funkcja powinna tłumaczyć expression
argument. Na przykład możesz użyć tego argumentu, aby określić format daty.
Przykład
Oto przykład konwersji ciągu na dziesiętny:
SELECT CONVERT(DECIMAL(5,2), '007');
Wynik:
7.00
Ciąg do daty
Oto przykład rzutowania ciągu na datę:
SELECT CONVERT(date, '09 Feb 2030');
Wynik:
2030-02-09
W tym przypadku CONVERT()
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 CONVERT(date, 'My Birthday');
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 CONVERT(date, '09/02/2030');
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 CONVERT(date, '09/02/2030');
Wynik:
2030-09-02
Tym razem zinterpretował datę jako drugi dzień września.
Styl style
Argument
Możemy użyć opcjonalnego style
argument określający sposób tłumaczenia wyrażenia.
Przykład:
SET LANGUAGE British;
SELECT
CONVERT(date, '09/02/2030') AS "British",
CONVERT(date, '09/02/2030', 101) AS "US",
CONVERT(date, '09/02/30', 1) AS "US (short)",
CONVERT(date, '20300902', 112) AS "ISO",
CONVERT(date, '09.02.2030', 104) AS "German";
Wynik:
+------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
Konkatenacja ciągów
Oto przykład rzutowania wartości liczbowej na łańcuch w celu połączenia wartości z łańcuchem:
SELECT 'Age: ' + CONVERT(varchar(10), 27);
Wynik:
Age: 27
Oto, co się stanie, jeśli najpierw go nie przekonwertujemy:
SELECT 'Age: ' + 27;
Wynik:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Age: ' 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ż ciąg nie może zostać przekonwertowany na liczbę całkowitą.
Obcinanie tekstu
Jedna poręczna sztuczka, którą możemy wykonać za pomocą CONVERT()
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,
CONVERT(varchar(20), ProductName) 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
CONVERT()
funkcja działa podobnie do CAST()
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.