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

CAST() vs TRY_CAST() i SQL Server:Hvad er forskellen?

Når du konverterer mellem datatyper i SQL Server, vil du løbe ind i forskellige funktioner, der tilsyneladende gør det samme. Men der er normalt forskelle mellem disse funktioner, som måske ikke er tydelige ved første øjekast. Et eksempel på dette er forskellen mellem CAST() og TRY_CAST() funktioner.

Denne artikel demonstrerer forskellen mellem disse funktioner, når du bruger SQL Server.

Den største forskel mellem CAST() og TRY_CAST() funktioner er i den måde, de håndterer data på, som ikke kan konverteres.

CAST()-funktionen

CAST() funktion konverterer et udtryk af en datatype til en anden. Dette giver dig mulighed for at gøre ting som at sammenkæde to værdier af forskellige datatyper. Sådan:

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

Resultat:

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

Dette fungerer fint, når data kan konverteres. Men hvad hvis dataene ikke kan konverteres?

I så fald får du noget som dette:

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

Resultat:

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

Dette er fair nok – hvis SQL Server ikke kan konvertere dataene, skal du vide det!

Der er dog en anden måde at gøre det på.

TRY_CAST()-funktionen

 TRY_CAST() funktion fungerer ligesom CAST() bortset fra, at hvis dataene ikke kan konverteres, returnerer de null (i stedet for at smide en fejl som CAST() gør):

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

Resultat:

Result
------
null

Dette kan være praktisk, hvis du vil bruge betinget programmering, så applikationen udfører en anden opgave afhængigt af, om dataene kan konverteres eller ej.

Eksempel:

SELECT   
    CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result;

Resultat:

Result     
-----------
Cast failed

Ugyldige datatyper

 TRY_CAST() funktion fungerer kun 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_CAST(10.00 AS Miami) AS Result;

Resultat:

Error: Type Miami is not a defined system type.

  1. Hvad er nyt i PgBouncer 1.6

  2. MySQL spring de første 10 resultater over

  3. PostgreSQL-gabfri sekvenser

  4. Sådan installeres og konfigureres phpMyAdmin på CentOS 6