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() ).