T-SQL Cast versus Convert


325

Apa pedoman umum tentang kapan Anda harus menggunakan CASTversus CONVERT? Apakah ada masalah kinerja terkait dengan memilih satu dibandingkan yang lain? Apakah satu lebih dekat ke ANSI-SQL?

Jawaban:


339

CONVERTkhusus SQL Server, CASTadalah ANSI.

CONVERTlebih fleksibel karena Anda dapat memformat tanggal dll. Selain itu, mereka hampir sama. Jika Anda tidak peduli dengan fitur yang diperluas, gunakan CAST.

EDIT:

Seperti dicatat oleh @beruic dan @CF dalam komentar di bawah, ada kemungkinan hilangnya presisi ketika konversi implisit digunakan (yaitu di mana Anda tidak menggunakan CAST atau CONVERT). Untuk informasi lebih lanjut, lihat CAST dan CONVERT dan khususnya grafik ini: Grafik Konversi Jenis Data SQL Server . Dengan informasi tambahan ini, saran asli masih tetap sama. Gunakan CAST jika memungkinkan.


5
Selain itu, saya percaya ada beberapa konversi numerik di mana CAST harus digunakan untuk menjaga presisi, tetapi saya mengalami kesulitan menemukan sumber yang dapat diandalkan untuk informasi ini.
beruic

2
@beruic Anda benar, ada info di MSDN: msdn.microsoft.com/en-us/library/ms187928.aspx CAST diperlukan untuk menjaga presisi saat mengkonversi antara tipe DECIMAL dan NUMERIC.
CF

@CF Di mana Anda melihat informasi ini? Saya telah mengikuti tautan, yang membuka halaman umum tentang CAST dan CONVERT, dan satu-satunya informasi mengenai ketepatan yang dapat saya temukan adalah tentang konversi nilai float yang menggunakan notasi ilmiah. Mungkinkah saya salah dalam komentar awal saya?
beruic

6
@beruic Ini tentang gambar ini di bagian bawah artikel i.msdn.microsoft.com/dynimg/IC170617.gif Sekarang saya berpikir bahwa mungkin kehilangan presisi dapat terjadi dalam konversi implisit dan tidak terjadi ketika CAST atau CONVERT digunakan . Tidak begitu jelas ...
CF

2
@CF Saya setuju bahwa itu tidak terlalu jelas, dan pasti akan ada dokumentasi yang lebih spesifik tentang itu, jadi mari kita berharap Microsoft melakukan ini. Tapi terlihat di sana :)
beruic


12

CAST adalah SQL standar, tetapi CONVERT hanya untuk dialek T-SQL. Kami memiliki sedikit keuntungan untuk mengkonversi dalam kasus datetime.

Dengan CAST, Anda menunjukkan ekspresi dan jenis target; dengan CONVERT, ada argumen ketiga yang mewakili gaya untuk konversi, yang didukung untuk beberapa konversi, seperti antara string karakter dan nilai tanggal dan waktu. Misalnya, CONVERT (DATE, '1/2/2012', 101) mengubah string karakter literal ke DATE menggunakan gaya 101 yang mewakili standar Amerika Serikat.



6

Sesuatu yang tampaknya belum dicatat adalah keterbacaan. Memiliki ...

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )

... mungkin lebih mudah dipahami daripada ...

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )

2
Tapi, saya pikir CAST biasanya lebih mudah dibaca. CAST(Column1 AS int)lebih logis untuk dibaca daripada CONVERT(int, Column1)untuk ekspresi panjang
S.Serpooshan

4

CAST menggunakan standar ANSI. Dalam hal portabilitas, ini akan bekerja pada platform lain. CONVERT khusus untuk server sql. Tetapi fungsinya sangat kuat. Anda dapat menentukan gaya yang berbeda untuk tanggal

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.