Trong SQL Server, 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.
Dưới đây là tổng quan nhanh về chức năng với các ví dụ.
Cú pháp
Cú pháp như sau:
CAST ( expression AS data_type [ ( length ) ] )
Ở đâu expression
là biểu thức để chuyển đổi, data_type
là kiểu dữ liệu mới và length
là độ dài tùy chọn cho kiểu dữ liệu mới.
Ví dụ
Dưới đây là một ví dụ về truyền một chuỗi dưới dạng số thập phân:
SELECT CAST('007' AS DECIMAL(5,2));
Kết quả:
7.00
Chuỗi đến ngày
Dưới đây là một ví dụ về truyền một chuỗi thành một ngày:
SELECT CAST('09 Feb 2030' AS date);
Kết quả:
2030-02-09
Trong trường hợp này, CAST()
chức năng có thể xác định các phần của ngày vì tôi đã cung cấp ngày ở định dạng mà nó nhận dạng được.
Việc chuyển một giá trị không thể được truyền dưới dạng ngày dẫn đến lỗi:
SELECT CAST('Next Xmas' AS date);
Kết quả:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Ngôn ngữ
Ngôn ngữ của phiên hiện tại có thể tạo ra sự khác biệt trong cách diễn giải ngày tháng.
Đây là những gì sẽ xảy ra khi sử dụng tiếng Anh:
SET LANGUAGE British;
SELECT CAST('09/02/2030' AS date);
Kết quả:
2030-02-09
Trong trường hợp này, ngày đó được hiểu là ngày thứ chín của tháng 2.
Hãy thay đổi ngôn ngữ thành us_English
:
SET LANGUAGE us_English;
SELECT CAST('09/02/2030' AS date);
Kết quả:
2030-09-02
Lần này, nó diễn giải ngày là ngày thứ hai của tháng 9.
Nối chuỗi
Dưới đây là một ví dụ về truyền một giá trị số sang một chuỗi để nối giá trị với một chuỗi:
SELECT 'Likes: ' + CAST(178 AS VARCHAR(10));
Kết quả:
Likes: 178
Đây là những gì sẽ xảy ra nếu chúng tôi không truyền nó:
SELECT 'Likes: ' + 178;
Kết quả:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Likes: ' to data type int.
Khi cố gắng nối hai giá trị với các kiểu dữ liệu khác nhau, SQL Server cần chuyển đổi ngầm một trong các giá trị để sử dụng kiểu dữ liệu của giá trị kia, để chúng đều là cùng một kiểu dữ liệu trước khi có thể thực hiện ghép. Nó tuân theo các quy tắc về mức độ ưu tiên của kiểu dữ liệu để thực hiện chuyển đổi này.
Trong SQL Server, INT
kiểu dữ liệu có mức độ ưu tiên cao hơn VARCHAR
.
Do đó, trong ví dụ trên, SQL Server cố gắng chuyển đổi chuỗi thành số nguyên. Nhưng điều này không thành công vì không thể chuyển đổi chuỗi thành số nguyên.
Cắt bớt văn bản
Một thủ thuật nhỏ hữu ích mà chúng ta có thể thực hiện với CAST()
chức năng là cắt ngắn các chuỗi dài hơn thành một độ dài dễ đọc hơn.
Dưới đây là một ví dụ về việc cắt bớt văn bản được chọn từ bảng cơ sở dữ liệu:
SELECT
ProductName,
CAST(ProductName AS VARCHAR(20)) AS Truncated
FROM Products;
Kết quả:
+---------------------------------+----------------------+ | ProductName | Truncated | |---------------------------------+----------------------| | Left handed screwdriver | Left handed screwdri | | Long Weight (blue) | Long Weight (blue) | | Long Weight (green) | Long Weight (green) | | Sledge Hammer | Sledge Hammer | | Chainsaw | Chainsaw | | Straw Dog Box | Straw Dog Box | | Bottomless Coffee Mugs (4 Pack) | Bottomless Coffee Mu | | Right handed screwdriver | Right handed screwdr | +---------------------------------+----------------------+
Thông tin thêm
CAST()
hàm hoạt động theo cách tương tự như CONVERT()
và nhiều chuyển đổi dữ liệu có thể được thực hiện bằng cách sử dụng một trong hai. Điều đó nói rằng, có sự khác biệt giữa chúng.
Xem tài liệu của Microsoft về CAST()
và CONVERT()
để biết thêm thông tin chi tiết về cách sử dụng chức năng này.