Być może zauważyłeś, że T-SQL zawiera zarówno funkcję CONVERT()
funkcja i TRY_CONVERT()
funkcja, której można używać w programie SQL Server do wykonywania konwersji między typami danych. Ale jeśli zastanawiasz się, jaka jest różnica między tymi dwiema funkcjami, czytaj dalej!
Różnica między CONVERT()
i TRY_CONVERT()
w sposób, w jaki obsługują typy danych, których nie można przekonwertować. Jeden zgłasza błąd, a drugi zwraca wartość null. Poniższe przykłady pokazują to.
Funkcja CONVERT()
Najpierw spójrzmy, co CONVERT()
funkcja robi. Konwertuje jeden typ danych na inny. Oto przykład:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Wynik:
Result ----------- Comments: 9
W tym przykładzie konwertujemy int
wartość do varchar(12)
. A ponieważ wartość można było przekonwertować na pożądany typ danych i długość, zadziałało to idealnie.
Jednak chociaż działa to doskonale, gdy konwersja się powiedzie, co się stanie, gdy się nie powiedzie?
Gdy konwersja nie powiedzie się → Błąd
Poprawmy nieco kod i zobaczmy, co się stanie, gdy konwersja się nie powiedzie:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Wynik:
Error: Arithmetic overflow error converting numeric to data type varchar.
Otrzymujemy błąd.
Funkcja TRY_CONVERT()
TRY_CONVERT()
to alternatywa, której możemy użyć, aby zapobiec wyświetlaniu komunikatu o błędzie. Ta funkcja wykonuje tę samą operację konwersji danych, co CONVERT()
, jednak jeśli ta funkcja nie może wykonać konwersji, zwraca null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Wynik:
Result ------ null
Możesz wziąć ten wynik i zastosować kod warunkowy, aby wydarzyło się coś innego w zależności od tego, czy konwersja się powiedzie.
Przykład:
SELECT CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Wynik:
Result ----------------- Conversion failed
Nieprawidłowe typy danych
Jedno zastrzeżenie z TRY_CONVERT()
jest to, że działa w ten sposób tylko w przypadku używania prawidłowych typów danych. Otrzymasz więc błąd, jeśli jawnie podasz niedozwolony typ danych.
Przykład:
SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;
Wynik:
Error: Type Homer is not a defined system type.