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?

BuddyJoe
sumber

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.

Matthew Farwell
sumber
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.

Abdeloihab Bourassi
sumber
8

Untuk memperluas jawaban di atas yang disalin oleh Shakti , saya sebenarnya dapat mengukur perbedaan kinerja antara kedua fungsi.

Saya sedang menguji kinerja variasi solusi untuk pertanyaan ini dan menemukan bahwa standar deviasi dan runtimes maksimum lebih besar saat menggunakan CAST.

Runtime dalam milidetik * Waktu dalam milidetik, dibulatkan ke terdekat 1/300 dari detik sesuai ketepatan DateTimejenis

Elaskanator
sumber
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
    )
Atario
sumber
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

RakeshP
sumber