sql >> Database >  >> RDS >> Sqlserver

PARSE() vs TRY_PARSE() in SQL Server:wat is het verschil?

In SQL Server, de PARSE() en TRY_PARSE() functies worden gebruikt voor het vertalen van een waarde naar een ander gegevenstype. Ze doen in wezen hetzelfde, met één uitzondering; hoe ze omgaan met fouten.

Als PARSE() mislukt bij het ontleden naar een ander gegevenstype, wordt een fout geretourneerd. Als TRY_PARSE() mislukt, retourneert het NULL .

Voorbeeld 1 – Ten eerste de overeenkomsten

Hier is een voorbeeld dat laat zien hoe beide functies hetzelfde resultaat retourneren wanneer ze de waarde met succes kunnen ontleden naar het vereiste gegevenstype:

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

Resultaat:

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

Zoals verwacht, geven ze allebei precies hetzelfde resultaat.

Maar laten we eens kijken wat er gebeurt als ze de waarde niet kunnen ontleden naar het vereiste gegevenstype.

Voorbeeld 2 – Wanneer PARSE() mislukt

Hier is een voorbeeld van wat er gebeurt als PARSE() kan een waarde niet ontleden naar een andere waarde:

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

Resultaat:

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

De bewerking mislukt omdat ik geen geldige weergave van het gevraagde gegevenstype heb opgegeven. Met andere woorden, PARSE() kan Next year niet converteren naar een datum gegevenstype zoals gevraagd.

Voorbeeld 3 – Wanneer TRY_PARSE() mislukt

Hier is een voorbeeld wanneer we dezelfde waarde proberen te ontleden met TRY_PARSE() :

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

Resultaat:

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

Het ontleden mislukt nog steeds, maar het retourneert NULL in plaats van een fout.

Voorbeeld 4 – TRY_PARSE() gebruiken met een voorwaardelijke instructie

We kunnen TRY_PARSE() . nemen en test de retourwaarde. Als het een NULL-waarde is, kunnen we één ding retourneren, als het een niet-NULL-waarde is, kunnen we een andere retourneren:

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

Resultaat:

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

Voorbeeld 5 – TRY_PARSE() met fout

Gewoon omdat TRY_PARSE() resulteert niet in een fout in de bovenstaande voorbeelden, het betekent niet dat het nooit resulteert in een fout. Er zijn momenten waarop u nog steeds een fout kunt krijgen tijdens het gebruik van deze functie.

U krijgt bijvoorbeeld een foutmelding als u een ongeldige waarde opgeeft als de culture argument:

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

Resultaat:

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

Enkele opmerkingen over deze functies

Hier zijn enkele punten die Microsoft te zeggen heeft over deze functies:

  • Het wordt aanbevolen om PARSE() . te gebruiken en TRY_PARSE() alleen voor het converteren van string naar datum/tijd en nummertypes. Gebruik voor andere gegevenstypen CAST() of CONVERT() .
  • Deze functies zijn afhankelijk van de aanwezigheid van .the .NET Framework Common Language Runtime (CLR).
  • Er is een bepaalde prestatie-overhead bij het ontleden van de tekenreekswaarde.
  • Deze functies worden niet op afstand bediend omdat ze afhankelijk zijn van de aanwezigheid van de CLR. Als u probeert een functie op afstand te gebruiken waarvoor de CLR nodig is, zou dit een fout op de externe server veroorzaken.

  1. sqldeveloper-foutbericht:netwerkadapter kan de verbindingsfout niet tot stand brengen

  2. Access-compatibele Wide World Importers SQL Server-database

  3. Gegevens importeren in een MySQL-database

  4. Is een view sneller dan een simpele query?