sql >> Databasteknik >  >> RDS >> Sqlserver

CONVERT() vs TRY_CONVERT i SQL Server:Vad är skillnaden?

Du kanske har märkt att T-SQL innehåller både en CONVERT() funktion och en TRY_CONVERT() funktion som du kan använda i SQL Server för att utföra konverteringar mellan datatyper. Men om du kliar dig i huvudet över vad skillnaden är mellan dessa två funktioner, läs vidare!

Skillnaden mellan CONVERT() och TRY_CONVERT() är i sättet de hanterar datatyper som inte kan konverteras. Den ena ger ett fel, medan den andra returnerar null. Följande exempel visar detta.

Funktionen CONVERT()

Låt oss först titta på vad CONVERT() funktion gör. Den konverterar en datatyp till en annan. Här är ett exempel:

SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;

Resultat:

Result     
-----------
Comments: 9

I det här exemplet konverterar vi en int värde till varchar(12) . Och eftersom värdet kunde omvandlas till vår önskade datatyp och längd fungerade detta perfekt.

Men även om detta fungerar perfekt när konverteringen lyckas, vad händer när den misslyckas?

När konverteringen misslyckas → Fel

Låt oss justera koden lite och se vad som händer när konverteringen misslyckas:

SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;

Resultat:

Error: Arithmetic overflow error converting numeric to data type varchar.

Vi får ett felmeddelande.

TRY_CONVERT()-funktionen

Den TRY_CONVERT() är ett alternativ som vi kan använda för att förhindra felmeddelandet. Den här funktionen utför samma datakonverteringsoperation som CONVERT() , men om den här funktionen inte kan utföra konverteringen returnerar den null :

SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;

Resultat:

Result
------
null

Du kan ta det här resultatet och tillämpa villkorlig kod så att en annan sak händer beroende på om konverteringen lyckas eller inte.

Exempel:

SELECT   
    CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL   
    THEN 'Conversion failed'  
    ELSE 'Conversion succeeded'  
END AS Result;

Resultat:

Result           
-----------------
Conversion failed

Ogiltiga datatyper

En varning med TRY_CONVERT() är att det bara fungerar på detta sätt när man använder giltiga datatyper. Så du får ett felmeddelande om du uttryckligen anger en datatyp som inte är tillåten.

Exempel:

SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;

Resultat:

Error: Type Homer is not a defined system type.


  1. Kommaseparerade värden med SQL Query

  2. MySQL Performance Tuning Tips för att optimera databasen

  3. WordPress MySQL SQL-frågefel i WPDB-klass

  4. sätt att undvika globala temptabeller i Oracle