Misalnya bisa
SELECT foo
FROM bar
WHERE foo BETWEEN 5 AND 10
pilih 5 dan 10 atau mereka dikeluarkan dari rentang?
sumber
Misalnya bisa
SELECT foo
FROM bar
WHERE foo BETWEEN 5 AND 10
pilih 5 dan 10 atau mereka dikeluarkan dari rentang?
Operator ANTARA bersifat inklusif.
Dari Buku Online:
BETWEEN mengembalikan TRUE jika nilai test_expression lebih besar atau sama dengan nilai begin_expression dan kurang dari atau sama dengan nilai end_expression.
Peringatan DateTime
NB: Dengan DateTimes Anda harus berhati-hati; jika hanya tanggal yang diberikan nilainya diambil pada tengah malam pada hari itu; untuk menghindari waktu yang hilang dalam tanggal akhir Anda, atau mengulangi pengambilan data hari berikutnya pada tengah malam dalam berbagai rentang, tanggal akhir Anda harus 3 milidetik sebelum tengah malam pada hari setelah tanggal Anda. 3 milidetik karena kurang dari ini dan nilainya akan dibulatkan hingga tengah malam pada hari berikutnya.
mis. untuk mendapatkan semua nilai dalam bulan Juni 2016 Anda harus menjalankan:
where myDateTime between '20160601' and DATEADD(millisecond, -3, '20160701')
yaitu
where myDateTime between '20160601 00:00:00.000' and '20160630 23:59:59.997'
Mengurangi 3 ms dari tanggal akan membuat Anda rentan terhadap baris yang hilang dari jendela 3 ms. Solusi yang benar juga merupakan yang paling sederhana:
where myDateTime >= '20160601' AND myDateTime < '20160701'
CONVERT
sebuah datetime ke tanggal , karena itu akan membuat indeks tidak berguna. Gunakan standarWHERE OrderDate >= '20160601' AND OrderDate < '20160701'
. Juga, pastikan untuk menggunakanyyyymmdd
, karenayyyy-mm-dd
tergantung pada lokal, dan akan disalahartikan tergantung padamdy, dmy, ymd, ydm, myd, and dym
pengaturan server Anda .Ya, tapi berhati-hatilah saat menggunakan antara tanggal.
benar-benar ditafsirkan sebagai 12:00, atau
jadi akan kehilangan apa pun yang terjadi pada hari 31 Januari. Dalam hal ini, Anda harus menggunakan:
atau
UPDATE : Sangat mungkin untuk memiliki catatan yang dibuat dalam detik terakhir hari itu, dengan waktu paling lambat
20090101 23:59:59.997
!!Karena alasan ini,
BETWEEN (firstday) AND (lastday 23:59:59)
pendekatan ini tidak direkomendasikan.Gunakan
myDate >= (firstday) AND myDate < (Lastday+1)
pendekatan itu sebagai gantinya.Artikel bagus tentang masalah ini di sini .
sumber
WHERE col BETWEEN 'a' AND 'z'
akan mengecualikan sebagian besar baris z misalnya.BETWEEN 5 AND 10
tidak termasuk10.2
...CAST
ingdatetime
sebagaiDATE
akan bekerja:CAST(DATE_TIME_COL AS DATE) BETWEEN '01/01/2009' AND '01/31/2009'
.It is entirely possible to have records created within that last second of the day, with a datetime as late as 01/01/2009 23:59:59.997
<- tidak bisakah kamu saat itu menggunakanAND '01/31/2009 23:59:59.99999999'
atau bagaimanapun banyak 9 diperlukanContoh dunia nyata dari SQL Server 2008.
Sumber data:
Pertanyaan:
Hasil:
sumber
ID = 3
dikecualikan? NilainyaStart
sama dengan nilai batasBETWEEN
atas, danBETWEEN
merupakan rentang inklusif, bukan rentang batas atas eksklusif.jika Anda menekan ini, dan tidak benar-benar ingin mencoba dan menangani menambahkan satu hari dalam kode, maka biarkan DB melakukannya ..
Jika Anda memasukkan bagian waktu: pastikan referensi di tengah malam. Kalau tidak, Anda bisa dengan mudah menghilangkan waktu:
dan tidak khawatir tentang itu.
sumber
sumber
Jika tipe data kolom datetime, maka Anda dapat melakukan ini untuk menghilangkan waktu dari datetime dan membandingkan antara rentang tanggal saja.
sumber
Itu memang termasuk batas-batas.
sumber
Saya selalu menggunakan ini:
DI MANA myDate ANTARA startDate AND (endDate + 1)
sumber