sql >> Database >  >> RDS >> Sqlserver

CAST() versus TRY_CAST() in SQL Server:wat is het verschil?

Bij het converteren tussen gegevenstypen in SQL Server kom je verschillende functies tegen die schijnbaar hetzelfde doen. Er zijn echter meestal verschillen tussen deze functies die op het eerste gezicht misschien niet duidelijk zijn. Een voorbeeld hiervan is het verschil tussen de CAST() en TRY_CAST() functies.

Dit artikel demonstreert het verschil tussen deze functies bij het gebruik van SQL Server.

Het belangrijkste verschil tussen de CAST() en TRY_CAST() functies zit in de manier waarop ze omgaan met gegevens die niet kunnen worden geconverteerd.

De CAST()-functie

De CAST() functie converteert een uitdrukking van het ene gegevenstype naar het andere. Hiermee kunt u dingen doen zoals het samenvoegen van twee waarden van verschillende gegevenstypen. Zoals dit:

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

Resultaat:

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

Dit werkt prima wanneer de gegevens kunnen worden geconverteerd. Maar wat als de gegevens niet kunnen worden geconverteerd?

In dat geval krijg je zoiets als dit:

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

Resultaat:

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

Dit is redelijk genoeg - als SQL Server de gegevens niet kan converteren, moet u dit weten!

Er is echter een andere manier om het te doen.

De TRY_CAST() Functie

De TRY_CAST() functie werkt net als CAST() behalve dat als de gegevens niet kunnen worden geconverteerd, het null . teruggeeft (in plaats van een foutmelding te geven zoals CAST() doet):

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

Resultaat:

Result
------
null

Dit kan handig zijn als u voorwaardelijke programmering wilt gebruiken, zodat de toepassing een andere taak uitvoert, afhankelijk van of de gegevens kunnen worden geconverteerd of niet.

Voorbeeld:

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

Resultaat:

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

Ongeldige gegevenstypen

De TRY_CAST() functie werkt alleen op deze manier bij gebruik van geldige gegevenstypen. U krijgt dus een foutmelding als u expliciet een gegevenstype opgeeft dat niet is toegestaan.

Voorbeeld:

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

Resultaat:

Error: Type Miami is not a defined system type.

  1. Bevriezen beheren in PostgreSQL

  2. JSON_VALUE() in MySQL

  3. Een database verbinden met Python

  4. Hoe logbestanden in MySQL te bekijken?