sql >> Database >  >> RDS >> Sqlserver

CONVERT() vs TRY_CONVERT in SQL Server:wat is het verschil?

Het is je misschien opgevallen dat T-SQL zowel een CONVERT() . bevat functie en een TRY_CONVERT() functie die u in SQL Server kunt gebruiken om conversies tussen gegevenstypen uit te voeren. Maar als je je hoofd krabt over wat het verschil is tussen deze twee functies, lees dan verder!

Het verschil tussen CONVERT() en TRY_CONVERT() zit in de manier waarop ze omgaan met gegevenstypen die niet kunnen worden geconverteerd. De ene geeft een fout, terwijl de andere nul retourneert. De volgende voorbeelden tonen dit aan.

De CONVERT() Functie

Laten we eerst eens kijken naar wat de CONVERT() functie doet. Het converteert het ene gegevenstype naar het andere. Hier is een voorbeeld:

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

Resultaat:

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

In dit voorbeeld converteren we een int waarde naar varchar(12) . En omdat de waarde kon worden omgezet in ons gewenste gegevenstype en lengte, werkte dit perfect.

Hoewel dit perfect werkt als de conversie slaagt, wat gebeurt er dan als het mislukt?

Als conversie mislukt → Fout

Laten we de code een beetje aanpassen en kijken wat er gebeurt als de conversie mislukt:

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

Resultaat:

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

We krijgen een foutmelding.

De TRY_CONVERT() Functie

De TRY_CONVERT() is een alternatief dat we kunnen gebruiken om de foutmelding te voorkomen. Deze functie voert dezelfde gegevensconversiebewerking uit als CONVERT() , maar als deze functie de conversie niet kan uitvoeren, wordt null geretourneerd :

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

Resultaat:

Result
------
null

U kunt dit resultaat nemen en voorwaardelijke code toepassen, zodat er iets anders gebeurt, afhankelijk van het al dan niet slagen van de conversie.

Voorbeeld:

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

Resultaat:

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

Ongeldige gegevenstypen

Een waarschuwing met TRY_CONVERT() is dat het alleen op deze manier werkt bij gebruik van geldige gegevenstypen. U krijgt dus een foutmelding als u expliciet een gegevenstype opgeeft dat niet is toegestaan.

Voorbeeld:

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

Resultaat:

Error: Type Homer is not a defined system type.


  1. Query voor array-elementen binnen JSON-type

  2. PostgreSQL vs MySQL, een vergelijking

  3. MySQL SQRT() Functie – Retourneer de vierkantswortel van een getal in MySQL

  4. Wat geeft parameters door aan SQL en waarom heb ik deze nodig?