W SQL Server, PARSE()
i TRY_PARSE()
funkcje służą do tłumaczenia wartości na inny typ danych. Zasadniczo robią to samo, z jednym wyjątkiem; jak radzą sobie z błędami.
Jeśli PARSE()
nie powiedzie się przy próbie parsowania do innego typu danych, zwróci błąd. Jeśli TRY_PARSE()
nie powiedzie się, zwróci NULL
.
Przykład 1 – Po pierwsze, podobieństwa
Oto przykład, który pokazuje, w jaki sposób obie funkcje zwracają ten sam wynik, gdy mogą pomyślnie przeanalizować wartość do wymaganego typu danych:
SELECT PARSE('Fri, 8 June 2018' AS date) AS PARSE, PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;
Wynik:
+------------+-------------+ | PARSE | TRY_PARSE | |------------+-------------| | 2018-06-08 | 2018-06-08 | +------------+-------------+
Zgodnie z oczekiwaniami obie zwracają dokładnie ten sam wynik.
Zobaczmy jednak, co się stanie, gdy nie będą mogli przeanalizować wartości do wymaganego typu danych.
Przykład 2 – Gdy PARSE() nie powiedzie się
Oto przykład tego, co się dzieje, gdy PARSE()
nie może przeanalizować wartości na inną wartość:
SELECT PARSE('Next year' AS date) AS Result;
Wynik:
Error converting string value 'Next year' into data type date using culture ''.
Operacja kończy się niepowodzeniem, ponieważ nie podałem prawidłowej reprezentacji żądanego typu danych. Innymi słowy, PARSE()
nie mogę przekonwertować Next year
na datę typ danych zgodnie z żądaniem.
Przykład 3 – gdy TRY_PARSE() nie powiedzie się
Oto przykład, kiedy próbujemy przeanalizować tę samą wartość za pomocą TRY_PARSE()
:
SELECT TRY_PARSE('Next year' AS date) AS Result;
Wynik:
+----------+ | Result | |----------| | NULL | +----------+
Analiza nadal kończy się niepowodzeniem, ale zwraca NULL
zamiast błędu.
Przykład 4 – Używanie TRY_PARSE() z instrukcją warunkową
Możemy wykonać TRY_PARSE()
i przetestuj jego zwracaną wartość. Jeśli jest to wartość NULL, możemy zwrócić jedną rzecz, jeśli jest to wartość różna od NULL, możemy zwrócić inną:
SELECT CASE WHEN TRY_PARSE('Next year' AS date) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Wynik:
+-------------------+ | Result | |-------------------| | Conversion failed | +-------------------+
Przykład 5 – TRY_PARSE() z błędem
Tylko dlatego, że TRY_PARSE()
nie powoduje błędu w powyższych przykładach, nie oznacza to, że nigdy skutkuje błędem. Są chwile, w których nadal możesz otrzymać błąd podczas korzystania z tej funkcji.
Na przykład otrzymasz błąd, jeśli podasz nieprawidłową wartość jako culture
argument:
SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;
Wynik:
The culture parameter 'Mars' provided in the function call is not supported.
Kilka uwag na temat tych funkcji
Oto kilka punktów, które Microsoft ma do powiedzenia na temat tych funkcji:
- Zaleca się użycie
PARSE()
iTRY_PARSE()
tylko do konwersji z typu string na datę/godzinę i liczbę. W przypadku innych typów danych użyjCAST()
lubCONVERT()
. - Te funkcje opierają się na obecności .NET Framework Common Language Runtime (CLR).
- Przetwarzanie wartości ciągu wiąże się z pewnym obciążeniem wydajnościowym.
- Te funkcje nie będą zdalne, ponieważ zależą od obecności CLR. Próba zdalnego sterowania funkcją wymagającą CLR spowodowałaby błąd na zdalnym serwerze.