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

Jak TRY_CONVERT() działa w SQL Server

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


  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 klucz obcy może mieć wartość NULL i/lub być duplikatem?

  2. Kiedy sortowanie programu SQL Server jest przewijane?

  3. Czy zapytania ANSI JOIN i inne niż ANSI JOIN będą działać inaczej?

  4. Jak usunąć domyślne ograniczenie SQL bez znajomości jego nazwy?

  5. Oto trzy powody, dla których możesz zauważyć szczytową aktywność w swojej instancji SQL