sql >> Database teknologi >  >> RDS >> Sqlserver

PARSE() vs TRY_PARSE() i SQL Server:Hvad er forskellen?

I SQL Server er PARSE() og TRY_PARSE() funktioner bruges til at oversætte en værdi til en anden datatype. De gør i bund og grund det samme, med én undtagelse; hvordan de håndterer fejl.

Hvis PARSE() mislykkes, når du forsøger at parse til en anden datatype, vil det returnere en fejl. Hvis TRY_PARSE() mislykkes, vil det returnere NULL .

Eksempel 1 – Først lighederne

Her er et eksempel, der viser, hvordan begge funktioner returnerer det samme resultat, når de kan parse værdien til den påkrævede datatype:

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

Resultat:

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

Som forventet giver de begge nøjagtig det samme resultat.

Men lad os se, hvad der sker, når de ikke er i stand til at parse værdien til den påkrævede datatype.

Eksempel 2 – Når PARSE() mislykkes

Her er et eksempel på, hvad der sker, når PARSE() er ikke i stand til at parse en værdi til en anden værdi:

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

Resultat:

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

Handlingen mislykkes, fordi jeg ikke har givet en gyldig repræsentation af den anmodede datatype. Med andre ord, PARSE() kan ikke konvertere Next year til en dato datatype som anmodet.

Eksempel 3 – Når TRY_PARSE() mislykkes

Her er et eksempel, når vi forsøger at parse den samme værdi med TRY_PARSE() :

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

Resultat:

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

Parsingen mislykkes stadig, men den returnerer NULL i stedet for en fejl.

Eksempel 4 – Brug af TRY_PARSE() med en betinget erklæring

Vi kan tage TRY_PARSE() og test dens returværdi. Hvis det er en NULL-værdi, kan vi returnere én ting, hvis det er en ikke-NULL-værdi, kan vi returnere en anden:

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

Resultat:

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

Eksempel 5 – TRY_PARSE() med fejl

Bare fordi TRY_PARSE() ikke resulterer i en fejl i ovenstående eksempler, betyder det ikke, at det aldrig resulterer i en fejl. Der er tidspunkter, hvor du stadig kan få en fejl, mens du bruger denne funktion.

Du får f.eks. en fejl, hvis du angiver en ugyldig værdi som culture argument:

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

Resultat:

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

Nogle bemærkninger om disse funktioner

Her er nogle punkter, som Microsoft har at sige om disse funktioner:

  • Det anbefales, at du bruger PARSE() og TRY_PARSE() kun til konvertering fra streng til dato/tid og taltyper. For andre datatyper skal du bruge CAST() eller CONVERT() .
  • Disse funktioner er afhængige af tilstedeværelsen af ​​.NET Framework Common Language Runtime (CLR).
  • Der er en vis ydeevne overhead ved at analysere strengværdien.
  • Disse funktioner vil ikke blive fjernet, da de afhænger af tilstedeværelsen af ​​CLR. Forsøg på at fjerne en funktion, der kræver CLR, vil forårsage en fejl på fjernserveren.

  1. Rails 3, ActiveRecord, PostgreSQL - .uniq kommando virker ikke?

  2. PostgreSQL-kontrolbegrænsning for fremmednøgletilstand

  3. Generer tilfældig int-værdi fra 3 til 6

  4. PostgreSQL, omkonfigurer eksisterende tabel, skift primær nøgle til type=serial