Saya, secara pribadi, hampir selalu menggunakan fungsi yang Ditentukan Pengguna untuk ini jika berurusan dengan SQL Server 2005 (atau versi yang lebih rendah), namun, perlu dicatat bahwa ada kelemahan spesifik untuk menggunakan UDF, terutama jika menerapkannya pada klausa WHERE (lihat di bawah dan komentar pada jawaban ini untuk perincian lebih lanjut). Jika menggunakan SQL Server 2008 (atau lebih tinggi) - lihat di bawah.
Bahkan, untuk sebagian besar database yang saya buat, saya menambahkan UDF ini tepat di dekat awal karena saya tahu ada 99% peluang saya akan membutuhkannya cepat atau lambat.
Saya membuat satu untuk "date only" & "time only" (walaupun "date only" satu adalah yang paling banyak digunakan dari keduanya).
Berikut ini beberapa tautan ke berbagai UDF terkait tanggal:
Essential SQL Server Tanggal, Waktu dan Fungsi DateTime
Dapatkan Fungsi Hanya Tanggal
Tautan terakhir itu menunjukkan tidak kurang dari 3 cara berbeda untuk mendapatkan tanggal hanya bagian dari bidang waktu dan menyebutkan beberapa pro dan kontra dari setiap pendekatan.
Jika menggunakan UDF, harus dicatat bahwa Anda harus mencoba menghindari menggunakan UDF sebagai bagian dari klausa WHERE dalam kueri karena ini akan sangat menghambat kinerja kueri. Alasan utama untuk ini adalah bahwa menggunakan UDF dalam klausa WHERE menjadikan klausa sebagai non-sargable , yang berarti bahwa SQL Server tidak lagi dapat menggunakan indeks dengan klausa itu untuk meningkatkan kecepatan eksekusi permintaan. Dengan merujuk pada penggunaan UDF saya sendiri, saya akan sering menggunakan kolom tanggal "mentah" dalam klausa WHERE, tetapi menerapkan UDF ke kolom SELECT. Dengan cara ini, UDF hanya diterapkan pada set-hasil yang difilter dan tidak setiap baris tabel sebagai bagian dari filter.
Tentu saja, pendekatan terbaik mutlak untuk ini adalah dengan menggunakan SQL Server 2008 (atau lebih tinggi) dan memisahkan tanggal dan waktu Anda , karena mesin basis data SQL Server kemudian secara asli menyediakan komponen tanggal dan waktu, dan secara efisien dapat meminta ini secara mandiri tanpa perlu UDF atau mekanisme lain untuk mengekstrak bagian tanggal atau waktu dari tipe datetime komposit.