sql >> Databasteknik >  >> RDS >> Sqlserver

PARSE() vs TRY_PARSE() i SQL Server:Vad är skillnaden?

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() och TRY_PARSE() endast för konvertering från sträng till datum/tid och nummertyper. För andra datatyper, använd CAST() eller CONVERT() .
  • 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.

  1. Hur make_timestamp() fungerar i PostgreSQL

  2. Bevara radavbrott från TextArea när du skriver till MySQL

  3. Är en CASE-sats och en DECODE ekvivalenta?

  4. MySQL LOG10()-funktion – Returnera bas-10-logaritmen för ett värde