Bạn có thể nhận thấy rằng T-SQL bao gồm cả CONVERT()
và một TRY_CONVERT()
mà bạn có thể sử dụng trong SQL Server để thực hiện chuyển đổi giữa các kiểu dữ liệu. Nhưng nếu bạn đang vò đầu bứt tai về sự khác biệt giữa hai chức năng này, hãy đọc tiếp!
Sự khác biệt giữa CONVERT()
và TRY_CONVERT()
là theo cách họ xử lý các loại dữ liệu không thể chuyển đổi. Một thông báo lỗi, trong khi lỗi kia trả về giá trị rỗng. Các ví dụ sau đây chứng minh điều này.
Hàm CONVERT ()
Đầu tiên, hãy xem CONVERT()
chức năng nào. Nó chuyển đổi kiểu dữ liệu này sang kiểu dữ liệu khác. Đây là một ví dụ:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Kết quả:
Result ----------- Comments: 9
Trong ví dụ này, chúng tôi chuyển đổi một int
giá trị thành varchar(12)
. Và vì giá trị có thể được chuyển đổi thành độ dài và kiểu dữ liệu mong muốn của chúng tôi, nên điều này hoạt động hoàn hảo.
Tuy nhiên, trong khi điều này hoạt động hoàn hảo khi chuyển đổi thành công, điều gì sẽ xảy ra khi nó không thành công?
Khi Chuyển đổi Không thành công → Lỗi
Hãy chỉnh sửa mã một chút và xem điều gì sẽ xảy ra khi chuyển đổi không thành công:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Kết quả:
Error: Arithmetic overflow error converting numeric to data type varchar.
Chúng tôi gặp lỗi.
Hàm TRY_CONVERT ()
TRY_CONVERT()
là một giải pháp thay thế mà chúng tôi có thể sử dụng để ngăn thông báo lỗi. Hàm này thực hiện thao tác chuyển đổi dữ liệu giống như CONVERT()
, tuy nhiên, nếu hàm này không thể thực hiện chuyển đổi, nó sẽ trả về null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Kết quả:
Result ------ null
Bạn có thể lấy kết quả này và áp dụng mã có điều kiện để một điều khác xảy ra tùy thuộc vào việc chuyển đổi có thành công hay không.
Ví dụ:
SELECT CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Kết quả:
Result ----------------- Conversion failed
Loại dữ liệu không hợp lệ
Một cảnh báo với TRY_CONVERT()
là nó chỉ hoạt động theo cách này khi sử dụng các kiểu dữ liệu hợp lệ. Vì vậy, bạn sẽ gặp lỗi nếu cung cấp rõ ràng loại dữ liệu không được phép.
Ví dụ:
SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;
Kết quả:
Error: Type Homer is not a defined system type.