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 enTRY_PARSE()
alleen voor het converteren van string naar datum/tijd en nummertypes. Gebruik voor andere gegevenstypenCAST()
ofCONVERT()
. - 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.