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

Sådan fungerer TRY_CAST() i SQL Server

I SQL Server er en ofte brugt funktion CAST() , som konverterer et udtryk af en datatype til en anden. Men hvis castet ikke lykkes, så returnerer det en fejl.

Indtast TRY_CAST() .

TRY_CAST() funktion returnerer ikke en fejl, hvis castet fejler. I stedet returnerer den NULL .

Der er dog nogle tilfælde, hvor det vil returnere en fejl.

Syntaks

Syntaksen ser sådan ud:

TRY_CAST ( expression AS data_type [ ( length ) ] )

Hvor expression er udtrykket, der skal konverteres, data_type er den nye datatype og length er en valgfri længde for den nye datatype.

Eksempel 1 – Castet lykkes

Her er et eksempel på casting af en streng som decimal :

SELECT TRY_CAST('007' AS DECIMAL(5,2));

Resultat:

7.00

I dette tilfælde lykkedes det for rollebesætningen.

Eksempel 2 – Cast fejler og returnerer NULL

Her er et eksempel på cast-fejl og NULL bliver returneret:

SELECT TRY_CAST('Double Oh Seven!' AS DECIMAL(5,2));

Resultat:

NULL

Castet mislykkedes, og derfor NULL blev returneret.

Til sammenligning er her, hvad der sker, når vi bruger CAST() i stedet for TRY_CAST() :

SELECT CAST('Double Oh Seven!' AS DECIMAL(5,2));

Resultat:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

Eksempel 3 – Cast mislykkes og returnerer en fejl

Der er nogle tilfælde, hvor TRY_CAST() vil returnere en fejl.

Hvis en cast udtrykkeligt ikke er tilladt, returnerer den en fejl:

SELECT TRY_CAST(10 AS xml);

Resultat:

Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type int to xml is not allowed.

Flere oplysninger

Se hvordan CAST() Virker i SQL Server for flere konverteringseksempler og CAST() vs TRY_CAST() i SQL Server til en sammenligning mellem CAST() og TRY_CAST() .

Se Microsofts dokumentation for CAST() og CONVERT() for mere detaljeret information (det meste af det gælder også for TRY_CAST() ).


  1. Sådan indsætter du store mængder data i sqlite-databasen i Android

  2. Ingen passende driver fundet til 'jdbc:mysql://localhost:3306/mysql

  3. Er det dårligt design at bruge arrays i en database?

  4. flyt data fra en tabel til en anden, postgresql edition