Trong SQL Server, CONVERT()
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:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Ở đâ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.
style
tùy chọn đối số có thể được sử dụng để chỉ định cách hàm sẽ dịch biểu thức expression
lý lẽ. Ví dụ:bạn có thể sử dụng đối số này để chỉ định định dạng ngày.
Ví dụ
Dưới đây là một ví dụ về chuyển đổi một chuỗi thành số thập phân:
SELECT CONVERT(DECIMAL(5,2), '007');
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 CONVERT(date, '09 Feb 2030');
Kết quả:
2030-02-09
Trong trường hợp này, CONVERT()
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 CONVERT(date, 'My Birthday');
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 CONVERT(date, '09/02/2030');
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 CONVERT(date, '09/02/2030');
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.
style
Đối số
Chúng ta có thể sử dụng style
tùy chọn đối số để chỉ định cách dịch biểu thức.
Ví dụ:
SET LANGUAGE British;
SELECT
CONVERT(date, '09/02/2030') AS "British",
CONVERT(date, '09/02/2030', 101) AS "US",
CONVERT(date, '09/02/30', 1) AS "US (short)",
CONVERT(date, '20300902', 112) AS "ISO",
CONVERT(date, '09.02.2030', 104) AS "German";
Kết quả:
+------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
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 'Age: ' + CONVERT(varchar(10), 27);
Kết quả:
Age: 27
Đây là những gì sẽ xảy ra nếu chúng tôi không chuyển đổi nó trước:
SELECT 'Age: ' + 27;
Kết quả:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Age: ' 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 CONVERT()
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,
CONVERT(varchar(20), ProductName) 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
CONVERT()
hàm hoạt động theo cách tương tự với CAST()
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 lên 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.