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

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

Khi chuyển đổi giữa các kiểu dữ liệu trong SQL Server, bạn sẽ chạy vào các chức năng khác nhau dường như thực hiện cùng một việc. Tuy nhiên, thường có sự khác biệt giữa các chức năng này mà thoạt nhìn có thể không rõ ràng. Ví dụ về điều này là sự khác biệt giữa CAST()TRY_CAST() các chức năng.

Bài viết này trình bày sự khác biệt giữa các chức năng này khi sử dụng SQL Server.

Sự khác biệt chính giữa CAST()TRY_CAST() theo cách chúng xử lý dữ liệu không thể chuyển đổi.

Hàm CAST ()

CAST() hàm chuyển đổi một biểu thức của một kiểu dữ liệu này sang một kiểu dữ liệu khác. Điều này cho phép bạn thực hiện những việc như, nối hai giá trị của các kiểu dữ liệu khác nhau. Như thế này:

SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

Kết quả:

Result     
-----------
Comments: 9

Điều này hoạt động tốt khi dữ liệu có thể được chuyển đổi. Nhưng nếu không thể chuyển đổi dữ liệu thì sao?

Trong trường hợp đó, bạn sẽ nhận được một cái gì đó như thế này:

SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

Kết quả:

Error: Arithmetic overflow error converting numeric to data type varchar.

Điều này đủ công bằng - nếu SQL Server không thể chuyển đổi dữ liệu, bạn cần biết!

Tuy nhiên, có một cách khác để làm điều đó.

Hàm TRY_CAST ()

TRY_CAST() hàm hoạt động giống như CAST() ngoại trừ trường hợp không thể chuyển đổi dữ liệu, nó sẽ trả về null (thay vì đưa ra một lỗi như CAST() hiện):

SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

Kết quả:

Result
------
null

Điều này có thể hữu ích nếu bạn muốn sử dụng lập trình có điều kiện để ứng dụng thực hiện một tác vụ khác tùy thuộc vào việc dữ liệu có thể được chuyển đổi hay không.

Ví dụ:

SELECT   
    CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result;

Kết quả:

Result     
-----------
Cast failed

Loại dữ liệu không hợp lệ

TRY_CAST() hàm 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_CAST(10.00 AS Miami) AS Result;

Kết quả:

Error: Type Miami is not a defined system type.

  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 chọn tất cả nếu tham số là null nếu không trả về mục cụ thể

  2. Đếm DISTINCT trên nhiều cột

  3. Cách triển khai ứng dụng với cơ sở dữ liệu máy chủ sql trên máy khách

  4. Tại sao việc sử dụng ký tự Dấu gạch dưới trong bộ lọc LIKE lại cho tôi tất cả kết quả?

  5. Cài đặt Microsoft SQL Server 2012 Enterprise Edition w / Service Pack 1