Membandingkan Nilai Masa dalam SQL Server
Membandingkan nilai masa dalam pertanyaan pangkalan data boleh menjadi satu tugas yang bernuansa, terutamanya apabila mempertimbangkan potensi perbezaan dalam format tarikh atau masa. Apabila matlamatnya adalah untuk membandingkan bahagian masa semata-mata, teknik khusus diperlukan untuk mencapai hasil yang tepat.
Pernyataan Masalah
Anda cuba membandingkan nilai masa dalam satu medan datetime dalam pertanyaan SQL dan tidak pasti tentang ketepatan pendekatan anda. Secara khususnya, anda ingin menentukan sama ada 08:00:00 adalah kurang daripada atau lebih daripada 07:30:00, tanpa mengira komponen tarikh.
Penyelesaian Tidak Cekap
Pendekatan awal anda melibatkan penukaran nilai startHour kepada datetime menggunakan fungsi convert() dan kemudian membandingkannya. Walaupun kaedah ini mungkin menghasilkan hasil yang diingini, kaedah ini mungkin tidak cekap disebabkan oleh penukaran rentetan yang terlibat untuk setiap baris.
Perbandingan Masa yang Cekap
Untuk perbandingan masa yang cekap, ia adalah disyorkan untuk menggunakan perwakilan titik terapung yang wujud bagi nilai datetime dalam SQL Server. Berikut ialah panduan langkah demi langkah untuk membandingkan nilai masa:
Sampel Pertanyaan
Pertimbangkan pertanyaan berikut untuk menggambarkan pendekatan ini:
declare @first datetime set @first = '2009-04-30 19:47:16.123' declare @second datetime set @second = '2009-04-10 19:47:16.123' select (cast(@first as float) - floor(cast(@first as float))) - (cast(@second as float) - floor(cast(@second as float))) as Difference
Pertanyaan ini mengira perbezaan antara bahagian masa dua nilai datetime, memberikan perbandingan langsung komponen masa mereka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Nilai Masa dengan Cekap dalam SQL Server Tanpa Mengambilkira Tarikhnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!