Saya punya start_date
dan end_date
. Saya ingin mendapatkan daftar tanggal di antara dua tanggal ini. Adakah yang bisa membantu saya menunjukkan kesalahan dalam permintaan saya.
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and Date between 2011/02/25 and 2011/02/27
Berikut Date
ini adalah datetime
variabel.
sql
sql-server
tsql
datetime
sql-server-2005
Neeraj
sumber
sumber
between
harus bekerja seperti yang diharapkan.Karena datetime tanpa segmen waktu yang ditentukan akan memiliki nilai
date 00:00:00.000
, jika Anda ingin memastikan Anda mendapatkan semua tanggal dalam rentang Anda, Anda harus menyediakan waktu untuk tanggal berakhir Anda atau meningkatkan tanggal berakhir Anda dan digunakan<
.ATAU
ATAU
JANGAN gunakan yang berikut ini, karena dapat mengembalikan beberapa catatan dari 2011/02/28 jika waktunya adalah 00: 00: 00.000.
sumber
'2011/02/28 00:00:00.000'
?convert(date, Date) between '2011/02/25' and '2011/02/27'
(setidaknya dengan MS SQL Server terbaru). Bagianconvert()
akan menangani pengupasan bagian waktu dan perbandingan antara kemudian akan bekerja seperti yang diharapkan.Coba ini:
Nilai tanggal harus diketik sebagai string.
Untuk memastikan pemeriksaan Anda di masa depan untuk SQL Server 2008 dan lebih tinggi,
Date
harus diloloskan karena itu kata cadangan di versi yang lebih baru.Ingatlah bahwa tanggal tanpa waktu memakan waktu tengah malam sebagai defaultnya, jadi Anda mungkin tidak memiliki nilai yang benar di sana.
sumber
Di sini, pertama tambahkan satu hari ke tanggal akhir saat ini
2011-02-28 00:00:00
, maka, maka Anda kurangi satu detik untuk membuat tanggal akhir2011-02-27 23:59:59
. Dengan melakukan ini, Anda bisa mendapatkan semua tanggal di antara interval yang diberikan.sumber
- jika tipe data berbeda
sumber
Query ini bagus untuk mengambil nilai antara tanggal saat ini dan 3 tanggal berikutnya
Ini pada akhirnya akan menambah buffer tambahan 3 hari ke tanggal saat ini.
sumber
Ini sudah sangat tua, tetapi mengingat banyak pengalaman yang saya miliki dengan tanggal, Anda mungkin ingin mempertimbangkan ini: Orang menggunakan pengaturan regional yang berbeda, seperti itu, beberapa orang (dan beberapa database / komputer, tergantung pada pengaturan regional) dapat membaca ini tanggal 11/12/2016 sebagai 11 Desember 2016 atau 12 November 2016. Terlebih lagi, 16/11/12 yang dipasok ke basis data MySQL akan dikonversi secara internal menjadi 12 November 2016, sedangkan basis data Access yang berjalan pada komputer pengaturan regional Inggris akan menafsirkan dan simpan sebagai 16 Nov 2012.
Oleh karena itu, saya membuat kebijakan saya untuk menjadi eksplisit setiap kali saya akan berinteraksi dengan tanggal dan basis data. Jadi saya selalu menyediakan kueri dan kode pemrograman saya sebagai berikut:
Perhatikan juga bahwa Access akan menerima #, dengan demikian:
tetapi MS SQL server tidak akan, jadi saya selalu menggunakan "'" seperti di atas, yang diterima oleh kedua database.
Dan ketika mendapatkan tanggal itu dari variabel dalam kode, saya selalu mengonversi hasilnya menjadi string sebagai berikut:
Saya menulis ini karena saya tahu kadang-kadang beberapa programmer mungkin tidak cukup tertarik untuk mendeteksi konversi yang melekat. Tidak akan ada kesalahan untuk tanggal <13, hanya hasil yang berbeda!
Adapun pertanyaan yang diajukan, tambahkan satu hari ke tanggal terakhir dan buat perbandingan sebagai berikut:
sumber
sumber
Coba letakkan tanggal di antara # # misalnya:
Ini berhasil untuk saya.
sumber
jika kencannya dalam 24 jam dan dimulai di pagi hari dan berakhir di malam hari harus menambahkan sesuatu seperti:
sumber
permintaan terbaik untuk tanggal yang dipilih antara tanggal saat ini dan kembali tiga hari :
permintaan terbaik untuk tanggal yang dipilih antara tanggal saat ini dan tiga hari berikutnya :
sumber
Lihat di bawah Contoh: Keduanya berfungsi dan Tidak Bekerja.
ATAU
ATAU
DAN di bawah ini tidak berfungsi:
sumber
kita dapat menggunakan antara untuk menampilkan dua data tanggal tetapi ini akan mencari seluruh data dan membandingkan sehingga akan membuat proses kami lambat untuk data besar, jadi saya sarankan semua orang untuk menggunakan
datediff
:di sini kalender adalah Tabel, dt sebagai variabel tanggal mulai dan dt2 adalah variabel tanggal selesai.
sumber
Saya suka menggunakan sintaks '1 MonthName 2015' untuk tanggal ex:
untuk kencan
sumber
Saya akan pergi untuk
Logikanya yang
>=
mencakup seluruh tanggal mulai dan<
tidak termasuk tanggal akhir, jadi kami menambahkan satu unit ke tanggal akhir. Ini dapat diadaptasi selama berbulan-bulan, misalnya:sumber
sumber
Anda dapat mencoba SQL ini
sumber
Benar-benar semua tanggal sql harus dalam format yyyy-MM-dd untuk hasil yang paling akurat.
sumber
sumber
lebih baik tulis seperti ini:
sumber
sumber