Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

PARSE () so với TRY_PARSE () trong SQL Server:Sự khác biệt là gì?

Trong SQL Server, PARSE()TRY_PARSE() các hàm được sử dụng để dịch một giá trị sang một kiểu dữ liệu khác. Về cơ bản, họ làm cùng một điều, với một ngoại lệ; cách họ đối phó với lỗi.

If PARSE() không thành công khi cố gắng phân tích cú pháp thành một kiểu dữ liệu khác, nó sẽ trả về một lỗi. Nếu TRY_PARSE() không thành công, nó sẽ trả về NULL .

Ví dụ 1 - Đầu tiên, Điểm giống nhau

Dưới đây là một ví dụ minh họa cách cả hai hàm trả về cùng một kết quả khi chúng có thể phân tích cú pháp thành công giá trị thành kiểu dữ liệu bắt buộc:

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

Kết quả:

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

Như mong đợi, cả hai đều trả về cùng một kết quả.

Nhưng hãy xem điều gì sẽ xảy ra khi họ không thể phân tích cú pháp giá trị thành loại dữ liệu bắt buộc.

Ví dụ 2 - Khi PARSE () không thành công

Dưới đây là một ví dụ về những gì sẽ xảy ra khi PARSE() không thể phân tích cú pháp một giá trị thành một giá trị khác:

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

Kết quả:

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

Thao tác không thành công vì tôi không cung cấp bản trình bày hợp lệ cho loại dữ liệu được yêu cầu. Nói cách khác, PARSE() không thể chuyển đổi Next year vào một ngày kiểu dữ liệu theo yêu cầu.

Ví dụ 3 - Khi TRY_PARSE () không thành công

Dưới đây là một ví dụ khi chúng tôi cố gắng phân tích cú pháp cùng một giá trị với TRY_PARSE() :

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

Kết quả:

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

Phân tích cú pháp vẫn không thành công, nhưng nó trả về NULL thay vì một lỗi.

Ví dụ 4 - Sử dụng TRY_PARSE () với câu lệnh có điều kiện

Chúng ta có thể lấy TRY_PARSE() và kiểm tra giá trị trả về của nó. Nếu đó là giá trị NULL, chúng tôi có thể trả về một thứ, nếu đó là giá trị không phải NULL, chúng tôi có thể trả về một thứ khác:

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

Kết quả:

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

Ví dụ 5 - TRY_PARSE () Có lỗi

Chỉ vì TRY_PARSE() không dẫn đến lỗi trong các ví dụ trên, không có nghĩa là nó không bao giờ dẫn đến một lỗi. Đôi khi bạn vẫn có thể gặp lỗi khi sử dụng chức năng này.

Ví dụ:bạn sẽ gặp lỗi nếu bạn cung cấp giá trị không hợp lệ làm culture đối số:

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

Kết quả:

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

Một số lưu ý về các chức năng này

Dưới đây là một số điểm mà Microsoft phải nói về các chức năng này:

  • Bạn nên sử dụng PARSE()TRY_PARSE() chỉ để chuyển đổi từ chuỗi thành ngày / giờ và các loại số. Đối với các kiểu dữ liệu khác, hãy sử dụng CAST() hoặc CONVERT() .
  • Các chức năng này dựa vào sự hiện diện của .NET Framework Common Language Runtime (CLR).
  • Có một chi phí hiệu suất nhất định trong quá trình phân tích cú pháp giá trị chuỗi.
  • Các chức năng này sẽ không được khởi động lại vì chúng phụ thuộc vào sự hiện diện của CLR. Việc cố gắng điều khiển từ xa một chức năng yêu cầu CLR sẽ gây ra lỗi trên máy chủ từ xa.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chuyển đổi dấu thời gian Unix thành giá trị ngày / giờ trong SQL Server

  2. SQL Server:Truy vấn nhanh, nhưng chậm so với thủ tục

  3. Mã khung thực thể chậm khi sử dụng Bao gồm () nhiều lần

  4. Chuỗi định dạng trong SQL Server là gì?

  5. SQL SERVER:Nhận tổng số ngày giữa hai ngày