a

Câu hỏi T-SQL Cast so với Chuyển đổi


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


288
2018-04-01 21:05


gốc




Các câu trả lời:


CONVERT là SQL Server cụ thể, CAST là ANSI.

CONVERT linh hoạt hơn ở chỗ bạn có thể định dạng ngày vv Ngoài ra, 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.

CHỈNH SỬA:

Như đã lưu ý bởi @beruic và @ C-F trong các bình luận dưới đây, có thể mất đi độ chính xác khi sử dụng một chuyển đổi ngầm định (đó là một trong những nơi bạn không sử dụng cả CAST lẫn CONVERT). Để biết thêm thông tin, hãy xem CAST và CONVERT và đặc biệt là đồ họa này: Biểu đồ chuyển đổi loại dữ liệu máy chủ SQL. Với thông tin bổ sung này, lời khuyên ban đầu vẫn giữ nguyên. Sử dụng CAST nếu có thể.


310
2018-04-01 21:39



Ngoài ra, tôi tin rằng có một số chuyển đổi số mà CAST nên được sử dụng để bảo tồn độ chính xác, nhưng tôi đang gặp khó khăn khi tìm một nguồn đáng tin cậy cho thông tin này. - beruic
@beruic Bạn nói đúng, có thông tin trong MSDN: msdn.microsoft.com/en-us/library/ms187928.aspx Cần có CAST để bảo toàn độ chính xác khi chuyển đổi giữa các loại DECIMAL và NUMERIC. - C-F
@ C-F Bạn thấy thông tin này ở đâu? Tôi đã theo liên kết, mở trang chung trên CAST và CONVERT và thông tin duy nhất về độ chính xác mà tôi có thể tìm thấy là về việc chuyển đổi các giá trị float sử dụng ký pháp khoa học. Tôi có thể sai trong bình luận đầu tiên của tôi? - beruic
@beruic Đó là về hình ả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 trong chuyển đổi ngầm và không xảy ra khi CAST hoặc CONVERT được sử dụng. Không rõ lắm ... - C-F
@ C-F Tôi đồng ý rằng nó không phải là rất rõ ràng, và chắc chắn phải có tài liệu cụ thể hơn về nó, vì vậy cho phép hy vọng Microsoft thực hiện điều này. Nhưng cũng phát hiện có :) - beruic


Chuyển đổi có thông số kiểu cho ngày chuyển đổi chuỗi.

http://msdn.microsoft.com/en-us/library/ms187928.aspx


25
2018-04-01 21:22





CAST là standar SQL, nhưng CONVERT không phải là (chỉ dành cho phương ngữ T-SQL), chúng ta có một lợi thế nhỏ để chuyển đổi trong trường hợp datetime

với CAST, bạn cho biết biểu thức và loại mục tiêu; với CONVERT, có một đối số thứ ba đại diện cho phong cách cho chuyển đổi, được hỗ trợ cho một số chuyển đổi, như giữa các ký tự chuỗi và giá trị ngày tháng và thời gian. Ví dụ: CONVERT (DATE, '1/2/2012', 101) sẽ chuyển đổi chuỗi ký tự chữ cái đến DATE sử dụng kiểu 101 đại diện cho tiêu chuẩn Hoa Kỳ.

Trân trọng,


8
2018-03-27 15:37





Một cái gì đó không ai có vẻ đã ghi nhận được là dễ đọc. Đang có…

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )

… Có thể dễ hiểu hơn…

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )

4
2018-02-22 23:04





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 chức năng rất mạnh. Bạn có thể chỉ định các kiểu khác nhau cho các ngày


3
2017-12-01 04:26





Mở rộng trên 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 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.

Runtimes in milliseconds * Thời gian tính bằng mili giây, được làm tròn đến 1 / 300th / giây theo độ chính xác của DateTime kiểu


2
2018-06-13 16:19