Trong SQL Server, PARSE()
và 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()
và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ụngCAST()
hoặcCONVERT()
. - 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.