In SQL Server, de TRY_CONVERT()
functie lijkt erg op de CONVERT()
functie, behalve dat TRY_CONVERT()
retourneert geen fout als de conversie mislukt (CONVERT()
doet).
In plaats daarvan wordt de TRY_CONVERT()
functie retourneert NULL
als de conversie niet lukt.
Er zijn echter gevallen waarin TRY_CONVERT()
zal een fout retourneren.
Syntaxis
De syntaxis gaat als volgt:
TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
Waar expression
is de uitdrukking die moet worden geconverteerd, data_type
is het nieuwe gegevenstype, en length
is een optionele lengte voor het nieuwe gegevenstype.
De optionele style
argument kan worden gebruikt om aan te geven hoe de functie de expression
. moet vertalen argument. U kunt dit argument bijvoorbeeld gebruiken om het datumformaat te specificeren.
Voorbeeld 1 – Conversie slaagt
Hier is een voorbeeld van het converteren van een tekenreeks naar decimaal:
SELECT TRY_CONVERT(DECIMAL(5,2), '007');
Resultaat:
7.00
In dit geval is de conversie gelukt.
Voorbeeld 2 – Conversie mislukt en retourneert NULL
Hier is een voorbeeld van een mislukte conversie en NULL
wordt geretourneerd:
SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');
Resultaat:
NULL
De conversie is mislukt, en dus NULL
is teruggestuurd.
Ter vergelijking, dit is wat er gebeurt als we CONVERT()
gebruiken in plaats van TRY_CONVERT()
:
SELECT CONVERT(DECIMAL(5,2), 'Three');
Resultaat:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Voorbeeld 3 – Conversie mislukt en retourneert een fout
Er zijn gevallen waarin TRY_CONVERT()
zal een fout teruggeven.
Als een conversie expliciet niet is toegestaan, wordt een fout geretourneerd:
SELECT TRY_CONVERT(xml, 10);
Resultaat:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Voorbeeld 4 – De style
Argument
We kunnen de optionele style
. gebruiken argument om aan te geven hoe de uitdrukking moet worden vertaald.
Voorbeeld:
SET LANGUAGE British;
SELECT
TRY_CONVERT(date, '09/02/2030') AS "British",
TRY_CONVERT(date, '09/02/2030', 101) AS "US",
TRY_CONVERT(date, '09/02/30', 1) AS "US (short)",
TRY_CONVERT(date, '20300902', 112) AS "ISO",
TRY_CONVERT(date, '09.02.2030', 104) AS "German";
Resultaat:
Changed language setting to British. +------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
Hier stel ik mijn taal in op British
, en voer vervolgens TRY_CONVERT()
. uit meerdere keren, elk met een andere style
argument (behalve de eerste, die de standaardtaal van mijn sessie gebruikt - Brits).
We kunnen zien dat het stijlargument van invloed is op hoe de uitdrukking wordt vertaald.
Meer informatie
Zie CONVERT()
in SQL Server voor meer conversievoorbeelden, en CONVERT()
vs TRY_CONVERT()
in SQL Server voor een vergelijking tussen CONVERT()
en TRY_CONVERT()
.
Zie de documentatie van Microsoft voor CAST()
en CONVERT()
voor meer gedetailleerde informatie (het meeste is ook van toepassing op TRY_CONVERT()
).