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

PARSE() срещу TRY_PARSE() в SQL Server:Каква е разликата?

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

Ако PARSE() не успее при опит за синтактичен анализ към различен тип данни, той ще върне грешка. Ако TRY_PARSE() неуспешно, той ще върне NULL .

Пример 1 – Първо, приликите

Ето пример, който демонстрира как и двете функции връщат един и същ резултат, когато могат успешно да анализират стойността до необходимия тип данни:

SELECT 
    PARSE('Fri, 8 June 2018' AS date) AS PARSE,
    PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;

Резултат:

+------------+-------------+
| PARSE      | TRY_PARSE   |
|------------+-------------|
| 2018-06-08 | 2018-06-08  |
+------------+-------------+

Както се очаква, и двете връщат абсолютно същия резултат.

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

Пример 2 – Когато PARSE() не успее

Ето пример за това какво се случва, когато PARSE() не може да анализира стойност към друга стойност:

SELECT PARSE('Next year' AS date) AS Result;

Резултат:

Error converting string value 'Next year' into data type date using culture ''. 

Операцията е неуспешна, защото не предоставих валидно представяне на искания тип данни. С други думи, PARSE() не може да преобразува Next year всреща тип данни според заявката.

Пример 3 – Когато TRY_PARSE() се провали

Ето пример, когато се опитваме да анализираме същата стойност с TRY_PARSE() :

SELECT TRY_PARSE('Next year' AS date) AS Result;

Резултат:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

Синтактичният анализ все още е неуспешен, но връща NULL вместо грешка.

Пример 4 – Използване на TRY_PARSE() с условен израз

Можем да вземем TRY_PARSE() и тествайте връщаната му стойност. Ако е стойност NULL, можем да върнем едно нещо, ако е стойност, различна от NULL, можем да върнем друго:

SELECT 
    CASE WHEN TRY_PARSE('Next year' AS date) IS NULL
        THEN 'Conversion failed'
        ELSE 'Conversion succeeded'
    END
AS Result;

Резултат:

+-------------------+
| Result            |
|-------------------|
| Conversion failed |
+-------------------+

Пример 5 – TRY_PARSE() с грешка

Само защото TRY_PARSE() не води до грешка в горните примери, това не означава, че никога води до грешка. Има моменти, когато все още можете да получите грешка, докато използвате тази функция.

Например, ще получите грешка, ако предоставите невалидна стойност като culture аргумент:

SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;

Резултат:

The culture parameter 'Mars' provided in the function call is not supported. 

Някои бележки за тези функции

Ето някои точки, които Microsoft трябва да каже за тези функции:

  • Препоръчително е да използвате PARSE() и TRY_PARSE() само за преобразуване от низ към тип дата/час и число. За други типове данни използвайте CAST() или CONVERT() .
  • Тези функции разчитат на наличието на .NET Framework Common Language Runtime (CLR).
  • Има известни допълнителни разходи при анализирането на стойността на низа.
  • Тези функции няма да бъдат отдалечени, тъй като зависят от наличието на CLR. Опитът да отдалечите функция, която изисква CLR, ще доведе до грешка на отдалечения сървър.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql групирайте само по редове, които са в последователност

  2. Какво е STATISTICS IO в SQL Server?

  3. Потребителска група на Charlotte SQL Server:Коригиране на бавни заявки. Бърз.

  4. SQL Server Уникален композитен ключ от две полета с автоматично увеличение на второ поле

  5. Генерирайте диаграма на връзката на таблицата от съществуваща схема (SQL Server)