Câu trả lời:
CONVERT
là máy chủ SQL cụ thể, CAST
là ANSI.
CONVERT
linh hoạt hơn ở chỗ bạn có thể định dạng ngày, v.v. Khác với điều đó, chúng khá giống nhau. Nếu bạn không quan tâm đến các tính năng mở rộng, hãy sử dụng CAST
.
BIÊN TẬP:
Như đã lưu ý bởi @beruic và @CF trong các bình luận bên dưới, có thể mất độ chính xác khi sử dụng chuyển đổi ngầm định (đó là một trong đó bạn sử dụng cả CAST và CHUYỂN ĐỔI). Để biết thêm thông tin, hãy xem CAST và CHUYỂN ĐỔI và cụ thể là đồ họa này: Biểu đồ chuyển đổi loại dữ liệu SQL Server . Với thông tin bổ sung này, lời khuyên ban đầu vẫn được giữ nguyên. Sử dụng CAST nếu có thể.
Convert có một tham số kiểu cho ngày chuyển đổi thành chuỗi.
CAST là SQL tiêu chuẩn, nhưng CONVERT chỉ dành cho phương ngữ T-SQL. Chúng tôi có một lợi thế nhỏ để chuyển đổi trong trường hợp datetime.
Với CAST, bạn chỉ ra biểu thức và loại mục tiêu; với CONVERT, có một đối số thứ ba biểu thị kiểu cho chuyển đổi, được hỗ trợ cho một số chuyển đổi, như giữa các chuỗi ký tự và giá trị ngày và thời gian. Ví dụ: CHUYỂN ĐỔI (NGÀY, '1/2/2012', 101) chuyển đổi chuỗi ký tự bằng chữ thành DATE bằng cách sử dụng kiểu 101 đại diện cho tiêu chuẩn Hoa Kỳ.
Để mở rộng câu trả lời trên được sao chép bởi Shakti , tôi thực sự đã có thể đo lường sự khác biệt hiệu suất giữa hai chức năng.
Tôi đã thử nghiệm hiệu suất của các biến thể của giải pháp cho câu hỏi này và thấy rằng độ lệch chuẩn và thời gian chạy tối đa lớn hơn khi sử dụng CAST
.
* Thời gian tính bằng mili giây, được làm tròn đến 1/300 giây gần nhất theo độ chính xác của DateTime
loại
Một cái gì đó dường như không ai đã lưu ý là khả năng đọc. Đang có…
CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)
Có thể dễ hiểu hơn
CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)
CAST(Column1 AS int)
đọc hợp lý hơn CONVERT(int, Column1)
ngay cả đối với các biểu thức dài