sql >> Databáze >  >> RDS >> Sqlserver

PARSE() vs TRY_PARSE() v SQL Server:Jaký je rozdíl?

V SQL Server, PARSE() a TRY_PARSE() funkce se používají k převodu hodnoty do jiného datového typu. Dělají v podstatě totéž, s jedinou výjimkou; jak se vypořádávají s chybami.

Pokud PARSE() selže při pokusu o analýzu na jiný datový typ, vrátí chybu. Pokud TRY_PARSE() selže, vrátí NULL .

Příklad 1 – Za prvé, podobnosti

Zde je příklad, který ukazuje, jak obě funkce vracejí stejný výsledek, když mohou úspěšně analyzovat hodnotu na požadovaný datový typ:

SELECT 
    PARSE('Fri, 8 June 2018' AS date) AS PARSE,
    PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;

Výsledek:

+------------+-------------+
| PARSE      | TRY_PARSE   |
|------------+-------------|
| 2018-06-08 | 2018-06-08  |
+------------+-------------+

Jak se očekávalo, oba vrátí přesně stejný výsledek.

Ale podívejme se, co se stane, když nebudou schopni analyzovat hodnotu na požadovaný datový typ.

Příklad 2 – Když PARSE() selže

Zde je příklad toho, co se stane, když PARSE() není schopen analyzovat hodnotu na jinou hodnotu:

SELECT PARSE('Next year' AS date) AS Result;

Výsledek:

Error converting string value 'Next year' into data type date using culture ''. 

Operace se nezdaří, protože jsem neposkytl platnou reprezentaci požadovaného datového typu. Jinými slovy PARSE() Next year nelze převést do rande datový typ podle požadavku.

Příklad 3 – Když TRY_PARSE() selže

Zde je příklad, kdy se snažíme analyzovat stejnou hodnotu pomocí TRY_PARSE() :

SELECT TRY_PARSE('Next year' AS date) AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

Analýza se stále nezdaří, ale vrací NULL místo chyby.

Příklad 4 – Použití TRY_PARSE() s podmíněným příkazem

Můžeme vzít TRY_PARSE() a otestujte jeho návratovou hodnotu. Pokud je to hodnota NULL, můžeme vrátit jednu věc, pokud to není hodnota NULL, můžeme vrátit jinou:

SELECT 
    CASE WHEN TRY_PARSE('Next year' AS date) IS NULL
        THEN 'Conversion failed'
        ELSE 'Conversion succeeded'
    END
AS Result;

Výsledek:

+-------------------+
| Result            |
|-------------------|
| Conversion failed |
+-------------------+

Příklad 5 – TRY_PARSE() s chybou

Jen proto, že TRY_PARSE() nevede k chybě ve výše uvedených příkladech, neznamená to, že nikdy vede k chybě. Jsou chvíle, kdy se při používání této funkce stále může objevit chyba.

Pokud například uvedete neplatnou hodnotu jako culture, zobrazí se chyba argument:

SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;

Výsledek:

The culture parameter 'Mars' provided in the function call is not supported. 

Několik poznámek k těmto funkcím

Zde je několik bodů, které má společnost Microsoft k těmto funkcím říci:

  • Doporučujeme použít PARSE()TRY_PARSE() pouze pro převod z řetězce na typ data/času a čísel. Pro ostatní datové typy použijte CAST() nebo CONVERT() .
  • Tyto funkce spoléhají na přítomnost .NET Framework Common Language Runtime (CLR).
  • Při analýze hodnoty řetězce je určitá režie výkonu.
  • Tyto funkce nebudou vzdálené, protože závisí na přítomnosti CLR. Pokus o vzdálenou funkci, která vyžaduje CLR, by způsobil chybu na vzdáleném serveru.

  1. MySQL db otazníky místo hebrejských znaků..?

  2. Jak počítat položky v čárkami odděleném seznamu MySQL

  3. Příklad připojení JavaFX MySQL prosím

  4. Jak funguje CONVERT_TZ() v MariaDB