W SQL Server TRY_CONVERT()
funkcja jest bardzo podobna do funkcji CONVERT()
funkcja, z wyjątkiem tego, że TRY_CONVERT()
nie zwraca błędu, jeśli konwersja nie powiedzie się (CONVERT()
robi).
Zamiast tego TRY_CONVERT()
funkcja zwraca NULL
jeśli konwersja się nie powiedzie.
Są jednak sytuacje, w których TRY_CONVERT()
zwróci błąd.
Składnia
Składnia wygląda tak:
TRY_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 1 – Konwersja powiodła się
Oto przykład konwersji ciągu na dziesiętny:
SELECT TRY_CONVERT(DECIMAL(5,2), '007');
Wynik:
7.00
W takim przypadku konwersja powiodła się.
Przykład 2 – Konwersja kończy się niepowodzeniem i zwraca NULL
Oto przykład nieudanej konwersji i NULL
zwracany:
SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');
Wynik:
NULL
Konwersja nie powiodła się, więc NULL
został zwrócony.
Dla porównania, oto co się dzieje, gdy używamy CONVERT()
zamiast TRY_CONVERT()
:
SELECT CONVERT(DECIMAL(5,2), 'Three');
Wynik:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Przykład 3 – Konwersja kończy się niepowodzeniem i zwraca błąd
W niektórych przypadkach TRY_CONVERT()
zwróci błąd.
Jeśli konwersja jest wyraźnie niedozwolona, zwraca błąd:
SELECT TRY_CONVERT(xml, 10);
Wynik:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Przykład 4 – style
Argument
Możemy użyć opcjonalnego style
argument określający sposób tłumaczenia wyrażenia.
Przykład:
SET LANGUAGE British;
SELECT
TRY_CONVERT(date, '09/02/2030') AS "British",
TRY_CONVERT(date, '09/02/2030', 101) AS "US",
TRY_CONVERT(date, '09/02/30', 1) AS "US (short)",
TRY_CONVERT(date, '20300902', 112) AS "ISO",
TRY_CONVERT(date, '09.02.2030', 104) AS "German";
Wynik:
Changed language setting to British. +------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
Tutaj ustawiłem język na British
, a następnie uruchomiono TRY_CONVERT()
wiele razy, każdy w innym style
argument (z wyjątkiem pierwszego, który używa domyślnego języka mojej sesji – brytyjskiego).
Widzimy, że argument style wpływa na sposób tłumaczenia wyrażenia.
Więcej informacji
Zobacz CONVERT()
w SQL Server, aby uzyskać więcej przykładów konwersji i CONVERT()
vs TRY_CONVERT()
w SQL Server w celu porównania funkcji CONVERT()
i TRY_CONVERT()
.
Zobacz dokumentację Microsoft dla CAST()
i CONVERT()
aby uzyskać bardziej szczegółowe informacje (większość z nich dotyczy również TRY_CONVERT()
).