sql >> Databasteknik >  >> RDS >> Sqlserver

Hur TRY_CONVERT() fungerar i SQL Server

I SQL Server, TRY_CONVERT() funktionen är mycket lik CONVERT() funktion, förutom att TRY_CONVERT() returnerar inte ett fel om konverteringen misslyckas (CONVERT() gör).

Istället, TRY_CONVERT() funktion returnerar NULL om konverteringen inte lyckas.

Det finns dock vissa tillfällen där TRY_CONVERT() kommer att returnera ett fel.

Syntax

Syntaxen ser ut så här:

TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )

Där expression är uttrycket som ska konverteras, data_type är den nya datatypen och length är en valfri längd för den nya datatypen.

Den valfria style argument kan användas för att specificera hur funktionen ska översätta expression argument. Du kan till exempel använda detta argument för att ange datumformatet.

Exempel 1 – Konverteringen lyckas

Här är ett exempel på att konvertera en sträng till decimal:

SELECT TRY_CONVERT(DECIMAL(5,2), '007');

Resultat:

7.00

I det här fallet lyckades konverteringen.

Exempel 2 – Konvertering misslyckas och returnerar NULL

Här är ett exempel på att konverteringen misslyckades och NULL returneras:

SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');

Resultat:

NULL

Konverteringen misslyckades, och därför NULL returnerades.

Som en jämförelse, här är vad som händer när vi använder CONVERT() istället för TRY_CONVERT() :

SELECT CONVERT(DECIMAL(5,2), 'Three');

Resultat:

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

Exempel 3 – Konverteringen misslyckas och returnerar ett fel

Det finns några tillfällen där TRY_CONVERT() kommer att returnera ett fel.

Om en konvertering uttryckligen inte är tillåten, returnerar den ett felmeddelande:

SELECT TRY_CONVERT(xml, 10);

Resultat:

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

Exempel 4 – style Argument

Vi kan använda den valfria style argument för att specificera hur uttrycket ska översättas.

Exempel:

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";

Resultat:

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 |
+------------+------------+--------------+------------+------------+

Här ställer jag in mitt språk till British , körde sedan TRY_CONVERT() flera gånger, var och en med olika style argument (förutom det första, som använder standardspråket för min session – brittiska).

Vi kan se att stilargumentet påverkar hur uttrycket översätts.

Mer information

Se CONVERT() i SQL Server för fler konverteringsexempel och CONVERT() kontra TRY_CONVERT() i SQL Server för en jämförelse mellan CONVERT() och TRY_CONVERT() .

Se Microsofts dokumentation för CAST() och CONVERT() för mer detaljerad information (det mesta gäller även för TRY_CONVERT() ).


  1. Hur man stoppar eller kontrollerar Microsoft Access-felkontrollmarkörer

  2. MySQL - Använder COUNT(*) i WHERE-satsen

  3. Lägg till WHERE-satser till SQL dynamiskt / programmatiskt

  4. Vad betyder ett (+)-tecken i en Oracle SQL WHERE-sats?