Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как TRY_CONVERT() работи в SQL Server

В SQL Server, TRY_CONVERT() функцията е много подобна на CONVERT() функция, с изключение на това TRY_CONVERT() не връща грешка, ако преобразуването не успее (CONVERT() прави).

Вместо това TRY_CONVERT() функцията връща NULL ако преобразуването не е успешно.

Има обаче някои случаи, когато TRY_CONVERT() ще върне грешка.

Синтаксис

Синтаксисът е така:

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

Където expression е изразът за преобразуване, data_type е новият тип данни и length е незадължителна дължина за новия тип данни.

Незадължителният style Аргументът може да се използва, за да се определи как функцията трябва да преведе expression аргумент. Например, можете да използвате този аргумент, за да посочите формата на датата.

Пример 1 – Преобразуването е успешно

Ето пример за преобразуване на низ в десетичен:

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

Резултат:

7.00

В този случай преобразуването е успешно.

Пример 2 – Преобразуването е неуспешно и връща NULL

Ето пример за неуспешно преобразуване и NULL се връща:

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

Резултат:

NULL

Преобразуването не бе успешно и така NULL беше върнат.

За сравнение, ето какво се случва, когато използваме CONVERT() вместо TRY_CONVERT() :

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

Резултат:

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

Пример 3 – Преобразуването е неуспешно и връща грешка

Има някои случаи, когато TRY_CONVERT() ще върне грешка.

Ако преобразуването не е изрично разрешено, то връща грешка:

SELECT TRY_CONVERT(xml, 10);

Резултат:

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

Пример 4 – style Аргумент

Можем да използваме незадължителния style аргумент, за да посочите как трябва да бъде преведен изразът.

Пример:

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

Резултат:

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

Тук зададох моя език на British , след което изпълни TRY_CONVERT() няколко пъти, като всеки използва различен style аргумент (с изключение на първия, който използва езика по подразбиране на моята сесия – британски).

Можем да видим, че аргументът style влияе върху начина, по който изразът се превежда.

Повече информация

Вижте CONVERT() в SQL Server за повече примери за преобразуване и CONVERT() срещу TRY_CONVERT() в SQL Server за сравнение между CONVERT() и TRY_CONVERT() .

Вижте документацията на Microsoft за CAST() и CONVERT() за по-подробна информация (повечето се отнася и за TRY_CONVERT() ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Експортирайте таблица във файл със заглавки на колони (имена на колони) с помощта на помощната програма bcp и SQL Server 2008

  2. Скрипт на цялата база данни SQL-Server

  3. Възстановяване на резервно копие на база данни на SQL Server в по-ниска версия

  4. SQL Server 2008 Ред вмъкване и актуализиране на времеви печати

  5. Неправилен синтаксис близо до ')', извикващ съхранена процедура с GETDATE