sql >> Database >  >> RDS >> Sqlserver

Hoe TRY_CONVERT() werkt in SQL Server

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() ).


  1. Hoe te installeren, beveiligen en prestatieafstemming van MariaDB Database Server

  2. SQLite JSON_INSERT()

  3. Hoe vind ik de gegevensmap voor een SQL Server-instantie?

  4. Maximum aantal tekens in labels (tabelnamen, kolommen enz.)