I SQL Server, PARSE()
och TRY_PARSE()
funktioner används för att översätta ett värde till en annan datatyp. De gör i huvudsak samma sak, med ett undantag; hur de hanterar fel.
Om PARSE()
misslyckas när man försöker tolka till en annan datatyp kommer det att returnera ett fel. Om TRY_PARSE()
misslyckas, returnerar den NULL
.
Exempel 1 – Först, likheterna
Här är ett exempel som visar hur båda funktionerna returnerar samma resultat när de framgångsrikt kan analysera värdet till den önskade datatypen:
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 väntat ger de båda exakt samma resultat.
Men låt oss se vad som händer när de inte kan analysera värdet till den önskade datatypen.
Exempel 2 – När PARSE() misslyckas
Här är ett exempel på vad som händer när PARSE()
kan inte analysera ett värde till ett annat värde:
SELECT PARSE('Next year' AS date) AS Result;
Resultat:
Error converting string value 'Next year' into data type date using culture ''.
Operationen misslyckas eftersom jag inte angav en giltig representation av den begärda datatypen. Med andra ord, PARSE()
kan inte konvertera Next year
till ett datum datatyp enligt begäran.
Exempel 3 – När TRY_PARSE() misslyckas
Här är ett exempel när vi försöker analysera samma värde med TRY_PARSE()
:
SELECT TRY_PARSE('Next year' AS date) AS Result;
Resultat:
+----------+ | Result | |----------| | NULL | +----------+
Analysen misslyckas fortfarande, men den returnerar NULL
istället för ett fel.
Exempel 4 – Användning av TRY_PARSE() med ett villkorligt uttalande
Vi kan ta TRY_PARSE()
och testa dess returvärde. Om det är ett NULL-värde kan vi returnera en sak, om det är ett icke-NULL-värde kan vi returnera en annan:
SELECT CASE WHEN TRY_PARSE('Next year' AS date) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Resultat:
+-------------------+ | Result | |-------------------| | Conversion failed | +-------------------+
Exempel 5 – TRY_PARSE() med fel
Bara för att TRY_PARSE()
inte resulterar i ett fel i exemplen ovan, det betyder inte att det aldrig resulterar i ett fel. Det finns tillfällen då du fortfarande kan få ett felmeddelande när du använder den här funktionen.
Du får till exempel ett felmeddelande om du anger ett ogiltigt värde 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.
Några anmärkningar om dessa funktioner
Här är några punkter som Microsoft har att säga om dessa funktioner:
- Det rekommenderas att du använder
PARSE()
ochTRY_PARSE()
endast för konvertering från sträng till datum/tid och nummertyper. För andra datatyper, användCAST()
ellerCONVERT()
. - Dessa funktioner är beroende av närvaron av .NET Framework Common Language Runtime (CLR).
- Det finns en viss prestationsoverhead vid analys av strängvärdet.
- Dessa funktioner kommer inte att fjärrstyras eftersom de beror på närvaron av CLR. Att försöka fjärrstyra en funktion som kräver CLR skulle orsaka ett fel på fjärrservern.