Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

PARSE() vs TRY_PARSE() w SQL Server:jaka jest różnica?

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()TRY_PARSE() tylko do konwersji z typu string na datę/godzinę i liczbę. W przypadku innych typów danych użyj CAST() lub CONVERT() .
  • 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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mogę połączyć się z SQL Server za pomocą uwierzytelniania Windows z aplikacji internetowej Java EE?

  2. Niejednoznaczny błąd nazwy kolumny na jednym konkretnym serwerze

  3. Napraw komunikat 8116 „Data typu danych argumentu jest nieprawidłowa dla argumentu 1 funkcji podciągu” w SQL Server

  4. Błąd „Nie można opuścić wyzwalacza” podczas próby opuszczenia wyzwalacza logowania? Spróbuj tego.

  5. Wykonaj procedurę składowaną w innej procedurze składowanej na serwerze SQL