sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan fungerer TRY_CONVERT() i SQL Server

I SQL Server er TRY_CONVERT() Funktionen ligner meget CONVERT() funktion, bortset fra at TRY_CONVERT() returnerer ikke en fejl, hvis konverteringen mislykkes (CONVERT() gør).

I stedet er TRY_CONVERT() funktion returnerer NULL hvis konverteringen ikke lykkes.

Der er dog nogle tilfælde, hvor TRY_CONVERT() vil returnere en fejl.

Syntaks

Syntaksen ser sådan ud:

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

Hvor expression er udtrykket, der skal konverteres, data_type er den nye datatype og length er en valgfri længde for den nye datatype.

Den valgfri style argument kan bruges til at specificere, hvordan funktionen skal oversætte expression argument. For eksempel kan du bruge dette argument til at angive datoformatet.

Eksempel 1 – Konverteringen lykkes

Her er et eksempel på konvertering af en streng til decimal:

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

Resultat:

7.00

I dette tilfælde lykkedes konverteringen.

Eksempel 2 – Konvertering mislykkedes og returnerer NULL

Her er et eksempel på, at konverteringen mislykkedes og NULL bliver returneret:

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

Resultat:

NULL

Konverteringen mislykkedes, og derfor NULL blev returneret.

Til sammenligning er her, hvad der sker, når vi bruger CONVERT() i stedet for TRY_CONVERT() :

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

Resultat:

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

Eksempel 3 – Konvertering mislykkes og returnerer en fejl

Der er nogle tilfælde, hvor TRY_CONVERT() vil returnere en fejl.

Hvis en konvertering udtrykkeligt ikke er tilladt, returnerer den en fejl:

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.

Eksempel 4 – style Argument

Vi kan bruge den valgfri style argument for at specificere, hvordan udtrykket skal oversættes.

Eksempel:

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

Her indstiller jeg mit sprog til British , og kørte derefter TRY_CONVERT() flere gange, hver med en anden style argument (undtagen det første, som bruger standardsproget for min session – britisk).

Vi kan se, at stilargumentet påvirker, hvordan udtrykket oversættes.

Flere oplysninger

Se CONVERT() i SQL Server for flere konverteringseksempler og CONVERT() vs TRY_CONVERT() i SQL Server for en sammenligning mellem CONVERT() og TRY_CONVERT() .

Se Microsofts dokumentation for CAST() og CONVERT() for mere detaljeret information (det meste af det gælder også for TRY_CONVERT() ).


  1. Hvordan får man størrelsen på mysql-databasen?

  2. [Video] Dataintegration med PostgreSQL

  3. Forskellige måder at overvåge SQL Server AlwaysOn Availability Groups

  4. Konverter varchar til datetime i SQL Server