sql >> Database teknologi >  >> RDS >> Sqlserver

CONVERT() vs TRY_CONVERT i SQL Server:Hvad er forskellen?

Du har måske bemærket, at T-SQL indeholder både en CONVERT() funktion og en TRY_CONVERT() funktion, som du kan bruge i SQL Server til at udføre konverteringer mellem datatyper. Men hvis du klør dig i hovedet over, hvad forskellen er mellem disse to funktioner, så læs videre!

Forskellen mellem CONVERT() og TRY_CONVERT() er i den måde, de håndterer datatyper, der ikke kan konverteres. Den ene kaster en fejl, mens den anden returnerer null. De følgende eksempler viser dette.

Konverter()-funktionen

Lad os først se på, hvad CONVERT() er funktion gør. Det konverterer en datatype til en anden. Her er et eksempel:

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

Resultat:

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

I dette eksempel konverterer vi en int værdi til varchar(12) . Og fordi værdien kunne konverteres til vores ønskede datatype og længde, fungerede dette perfekt.

Men selvom dette fungerer perfekt, når konverteringen lykkes, hvad sker der så, når den mislykkes?

Når konvertering mislykkes → Fejl

Lad os justere koden lidt og se, hvad der sker, når konverteringen mislykkes:

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

Resultat:

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

Vi får en fejl.

TRY_CONVERT()-funktionen

 TRY_CONVERT() er et alternativ, som vi kan bruge til at forhindre fejlmeddelelsen. Denne funktion udfører den samme datakonverteringsoperation som CONVERT() , men hvis denne funktion ikke kan udføre konverteringen, returnerer den null :

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

Resultat:

Result
------
null

Du kan tage dette resultat og anvende betinget kode, så der sker en anden ting, afhængigt af om konverteringen lykkes eller ej.

Eksempel:

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

Resultat:

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

Ugyldige datatyper

En advarsel med TRY_CONVERT() er, at det kun fungerer på denne måde, når du bruger gyldige datatyper. Så du får en fejl, hvis du udtrykkeligt angiver en datatype, der ikke er tilladt.

Eksempel:

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

Resultat:

Error: Type Homer is not a defined system type.


  1. MySQL-hurtigt tip:Brug af DAYOFWEEK-funktionen

  2. SELECTING med flere WHERE-betingelser i samme kolonne

  3. Første offentlige forhåndsvisning af SQL Server 2019:CTP 2.0

  4. Betinget SUM på Oracle