Jika catatan disimpan sebagai DATETIME, ini akan memilih semua catatan dari tanggal sebelumnya, mengabaikan bagian waktu. Telah dijalankan pada 23:59:59, kueri akan mengembalikan semua catatan selama beberapa 48jam terakhir , bukan 24.
Quassnoi
18
Jika Anda ingin memilih 24 jam terakhir dari bidang datetime, gantikan 'curate ()' dengan 'now ()'. Ini juga termasuk waktu.
Haentz
564
Di MySQL:
SELECT*FROM mytable
WHERE record_date >= NOW()- INTERVAL 1 DAY
Di SQL Server:
SELECT*FROM mytable
WHERE record_date >= DATEADD(day,-1, GETDATE())
Di Oracle:
SELECT*FROM mytable
WHERE record_date >= SYSDATE -1
Di PostgreSQL:
SELECT*FROM mytable
WHERE record_date >= NOW()-'1 day'::INTERVAL
Di Redshift:
SELECT*FROM mytable
WHERE record_date >= GETDATE()-'1 day'::INTERVAL
Di SQLite:
SELECT*FROM mytable
WHERE record_date >= datetime('now','-1 day')
Saya mencoba permintaan untuk mysql tetapi jika 2AM nya, misalnya, saya mendapatkan catatan dari 00 - 02:00. Hanya dua jam, bukannya 24. Ada ide?
Manos
Saya sangat menyukai solusi yang disediakan di sini, apa yang saya catat di MySQL adalah kinerja solusi Guillaume Flandre lebih cepat.
oneworld
1
Di Amazon Redshift, saya mengerti function getdate() does not exist. Menggantinya dengan current_datedan itu berfungsi dengan baik.
FloatingRock
1
Jawaban ini membuat saya berharap ada tombol "bintang" karena saya ingin menandai ini.
Brian Risk
1
@Manos Di MySQL, sepertinya CURDATE()tidak mengembalikan tanggal dengan porsi waktu, begitu seterusnya 00. Saya memperbaikinya dengan menggunakan NOW()bukan CURDATE().
4castle
21
MySQL:
SELECT*FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)
INTERVAL dapat dalam TAHUN, BULAN, HARI, JAM, MENIT, DETIK
Misalnya, dalam 10 menit terakhir
SELECT*FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
Ini adalah jawaban yang paling menjawab pertanyaan spesifik: Bagaimana mengembalikan 24 JAM PRECEDING (dari saat ini), sebagai lawan dari 24 sebelumnya (yang menyarankan semua hasil untuk hari sebelumnya). Ini menjawab persyaratan saya, ini membuat saya mendapatkan dukungan. EDIT: Nilainya menyebutkan kolom table_name.the_date harus stempel waktu.
Anthony Cregan
8
SQL mana yang tidak ditentukan, SQL 2005/2008
SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())
Jika Anda menggunakan tipe tanggal akurasi meningkat 2008, maka gunakan fungsi sysdatetime () baru, sama-sama jika menggunakan waktu UTC secara internal bertukar ke panggilan UTC.
Jika cap waktu yang dianggap sebagai cap waktu UNIX, Anda harus terlebih dahulu mengonversi cap waktu UNIX (mis. 1462567865) menjadi stempel waktu mysql atau data
Itu dengan asumsi mesin yang digunakan adalah MySQL karena FROM_UNIXTIME () adalah fungsi MySQL. Untuk penggunaan SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) Jika Anda membutuhkan akurasi milidetik di SQL Server 2016 dan yang lebih baru digunakan: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
Ini adalah satu-satunya yang bekerja untuk saya di mySQL. Untuk beberapa alasan ketika saya mencoba SELECT * FROM myTable WHERE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 JAM); Saya masih mendapatkan catatan dari 2018-06-14.
jDub9
1
SELECT*FROM tableName
WHERE datecolumn >= dateadd(hour,-24,getdate())
mengapa Anda perlu menambahkan "dan order_date <= GETDATE ()" ketika Anda sudah mencari 24 jam terakhir dari saat exection dari query itu? Sangat tidak masuk akal untuk memiliki bagian itu di mana klausa ketika Anda telah "MENDAPATKAN" sudah disebutkan di yang pertama. Anda lebih baik membuatnya "order_date> = DateAdd (DAY, -1, GETDATE ())" itu saja!
Jawaban:
sumber
DATETIME
, ini akan memilih semua catatan dari tanggal sebelumnya, mengabaikan bagian waktu. Telah dijalankan pada23:59:59
, kueri akan mengembalikan semua catatan selama beberapa48
jam terakhir , bukan24
.Di
MySQL
:Di
SQL Server
:Di
Oracle
:Di
PostgreSQL
:Di
Redshift
:Di
SQLite
:Di
MS Access
:sumber
function getdate() does not exist
. Menggantinya dengancurrent_date
dan itu berfungsi dengan baik.CURDATE()
tidak mengembalikan tanggal dengan porsi waktu, begitu seterusnya00
. Saya memperbaikinya dengan menggunakanNOW()
bukanCURDATE()
.MySQL:
INTERVAL dapat dalam TAHUN, BULAN, HARI, JAM, MENIT, DETIK
Misalnya, dalam 10 menit terakhir
sumber
SQL mana yang tidak ditentukan, SQL 2005/2008
Jika Anda menggunakan tipe tanggal akurasi meningkat 2008, maka gunakan fungsi sysdatetime () baru, sama-sama jika menggunakan waktu UTC secara internal bertukar ke panggilan UTC.
sumber
di postgres, dengan asumsi tipe bidang Anda adalah cap waktu:
sumber
Jika cap waktu yang dianggap sebagai cap waktu UNIX, Anda harus terlebih dahulu mengonversi cap waktu UNIX (mis. 1462567865) menjadi stempel waktu mysql atau data
sumber
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField)
Jika Anda membutuhkan akurasi milidetik di SQL Server 2016 dan yang lebih baru digunakan:SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
sumber
Halo saya sekarang melewati banyak waktu dari posting asli tetapi saya punya masalah yang sama dan saya ingin berbagi.
Saya mendapat bidang datetime dengan format ini YYYY-MM-DD hh: mm: ss, dan saya ingin mengakses sepanjang hari, jadi inilah solusi saya.
Fungsi DATE (), di MySQL: Ekstrak bagian tanggal dari ekspresi tanggal atau datetime.
dengan ini saya mendapatkan semua daftar baris pada hari ini.
Saya harap ini membantu siapa pun.
sumber
sumber
Dalam SQL Server (Untuk 24 jam terakhir):
sumber