[ad_1]
saya harus mencatat semua baris dari 30 terakhir hingga hari ini. saya sudah mencoba ini tetapi tidak berhasil
Apa yang saya coba:
pilih tanggal_waktu dari dsr_data di mana tanggal_waktu >= CONVERT(Varchar(100), DATEADD(DAY,-30,GETDATE()),103) dan tanggal_waktu <= CONVERT(varchar(100), getdate(),103)
Solusi 3
SELECT date_time FROM dsr_data WHERE date_time between DATEADD(DAY,-30,GETDATE()) and GETDATE();
Solusi 1
Mengapa Anda menggunakan CONVERT?
Satu-satunya alasan yang mungkin adalah alasan yang sama mengapa hal itu tidak berhasil: Anda menyimpan tanggal sebagai kolom NVARCHAR, bukan DATE, DATETIME, atau DATETIME2.
Saat Anda membandingkan string, perbandingannya sepenuhnya didasarkan pada karakter pertama yang berbeda dalam dua string: dan karena Anda secara khusus memilih untuk memformat tanggal dalam format 103, yaitu “dd/MM/yyyy”, perbandingannya akan menjadi sampah total – misalnya tahun akan diperiksa terakhir, jadi 31/01/2017 adalah sebelum 31/12/1952 karena perbandingannya akan didasarkan pada digit pertama bulan tersebut, dan ‘0’ kurang dari ‘1’
Ubah basis data Anda. Selalu simpan data dalam tipe data yang sesuai: artinya nilai integer di kolom INT, informasi tanggal di kolom DATE, DATETIME, atau DATETIME2, dan seterusnya. Jika tidak, ini hanyalah awal dari sekian banyak masalah buruk dan buruk yang menunggu untuk menimpa Anda…
Solusi 2
Gunakan kueri di bawah ini.
SELECT date_time FROM dsr_data WHERE date_time >= DATEADD(day,-30, getdate()) and date_time <= getdate()
[ad_2]
コメント