Truyền T-SQL so với chuyển đổi


325

Hướng dẫn chung về thời điểm bạn nên sử dụng CASTso với CONVERT? Có bất kỳ vấn đề hiệu suất liên quan đến việc chọn cái này so với cái kia không? Là một gần gũi hơn với ANSI-SQL?

Câu trả lời:


339

CONVERTlà máy chủ SQL cụ thể, CASTlà ANSI.

CONVERTlinh 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ể.


5
Ngoài ra, tôi tin rằng có một số chuyển đổi số trong đó CAST nên được sử dụng để bảo vệ độ chính xác, nhưng tôi gặp khó khăn khi tìm một nguồn đáng tin cậy cho thông tin này.
beruic

2
@beruic Bạn nói đúng, có thông tin trong MSDN: msdn.microsoft.com/en-us/l Library / ms187928.aspx CAST được yêu cầu để duy trì độ chính xác khi chuyển đổi giữa các loại DECIMAL và NUMERIC.
CF

@CF Bạn thấy thông tin này ở đâu? Tôi đã theo liên kết, mở ra trang chung về CAST và CHUYỂN ĐỔI, và thông tin duy nhất liên quan đến độ chính xác tôi có thể tìm thấy là về việc chuyển đổi các giá trị float sử dụng ký hiệu khoa học. Tôi có thể sai trong nhận xét ban đầu của tôi?
beruic

6
@beruic Đó là về bức ảnh này ở cuối bài viết i.msdn.microsoft.com/dynimg/IC170617.gif Bây giờ tôi nghĩ rằng có thể mất chính xác có thể xảy ra khi chuyển đổi ngầm và không xảy ra khi sử dụng CAST hoặc CONVERT . Nó không hoàn toàn rõ ràng ...
CF

2
@CF Tôi đồng ý rằng nó không rõ ràng lắm, và chắc chắn cần có tài liệu cụ thể hơn về nó, vì vậy hãy hy vọng Microsoft làm điều này. Nhưng cũng phát hiện ra ở đó :)
beruic


12

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ỳ.


8

Để 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 chạy tính bằng mili giây * 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 DateTimeloại


6

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
    )

2
Nhưng, tôi nghĩ CAST thường dễ đọc hơn. 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
S.Serpooshan

4

CAST sử dụng tiêu chuẩn ANSI. Trong trường hợp tính di động, điều này sẽ hoạt động trên các nền tảng khác. CONVERT dành riêng cho máy chủ sql. Nhưng là chức năng rất mạnh. Bạn có thể chỉ định các kiểu khác nhau cho ngày

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.