Datetime sama atau lebih besar dari hari ini di MySQL

175

Apa cara terbaik untuk melakukan hal berikut:

SELECT * FROM users WHERE created >= today;

Catatan: dibuat adalah bidang datetime.

n00b
sumber

Jawaban:

329
SELECT * FROM users WHERE created >= CURDATE();

Tapi saya pikir maksud Anda created < today

Clodoaldo Neto
sumber
11
CURDATE()kembalikan hanya tanggal bukan waktu
Shakti Singh
20
@ n00b bagaimana Anda memiliki pengguna yang dibuat di masa depan ..? menarik =) Saya menggunakan ini untuk melihat apakah posting sudah kadaluarsa.
Garet Claborn
75
SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())

Baca lebih lanjut: http://www.tomjepson.co.uk/tutorials/36/mysql-select-where-date-today.html

Edmhs
sumber
6
Mungkin saya melewatkan sesuatu, tetapi dengan tipe DATETIME, solusi CURDATE () tidak berfungsi. Ini tidak.
Jahmic
ditambah ini membutuhkan banyak waktu karena ada overhead mengkonversi DATETIME to date melalui fungsi DATE () dan kemudian membandingkan dengan kondisi di mana.
roopunk
Jangan gunakan fungsi pada kolom, itu membuat kueri mengabaikan indeks, menyebabkan permintaan lambat. Periksa jawaban saya untuk pendekatan alternatif stackoverflow.com/a/42365426/4311336
Bsienn
33
SELECT * FROM users WHERE created >= NOW();

jika kolom adalah tipe datetime.

Shakti Singh
sumber
1
maksud saya hari ini bukan sekarang: D yang saya butuhkan hari ini seperti 2011-03-03 bukan 2011-03-03 14:02:02
n00b
@ n00b: akan mengembalikan baris lebih besar dari hari ini jangan khawatir jika waktunya termasuk
Shakti Singh
3
katakanlah ini 2011-02-02 14:02:02 - pengguna yang telah dibuat pada 10:02:02 tidak akan dikembalikan dalam versi Anda meskipun mereka dibuat "hari ini" :)
n00b
@ n00b: Lol ya, tidak ada pengguna yang akan kembali, kalau saja kita bisa menghentikan waktu.
Mike Purcell
15

Jika 'dibuat' adalah tipe datetime

SELECT * FROM users WHERE created < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

CURDATE () juga berarti '2013-05-09 00:00:00'

Bart
sumber
Terima kasih untuk ini. Saya sebenarnya membutuhkan DATE_SUB (digunakan dengan cara yang sama), tetapi ini menempatkan saya di jalan yang benar.
Daniel Price
Ini tidak akan mengembalikan data di mana tanggal berisi 0s dalam waktu, yaitu '2013-05-09 00:00:00' akan terlewatkan
Bsienn
8

Jawaban yang ditandai menyesatkan. Pertanyaannya adalah DateTime, tetapi menyatakan apa yang dibutuhkan itu adil CURDATE().

Jawaban terpendek dan tepat untuk ini adalah:

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;
JeffMan
sumber
5

Jika kolom memiliki indeks dan fungsi diterapkan pada kolom maka indeks tidak berfungsi dan pemindaian tabel penuh terjadi, menyebabkan permintaan sangat lambat.

Untuk menggunakan indeks dan membandingkan datetime dengan hari ini / tanggal saat ini, berikut ini dapat digunakan.

Solusi untuk OP:

select * from users
where created > CONCAT(CURDATE(), ' 23:59:59')

Contoh untuk mendapatkan data hari ini:

select * from users
where 
    created >= CONCAT(CURDATE(), ' 00:00:00') AND
    created <= CONCAT(CURDATE(), ' 23:59:59')

Atau gunakan ANTARA singkatnya

select * from users 
where created BETWEEN 
      CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59')
Bsienn
sumber
2
SELECT * FROM users WHERE created >= now()
Silx
sumber
Ini tidak akan mengembalikan catatan sebelum saat ini mulai hari ini.
gsziszi
0

Kode di bawah ini berfungsi untuk saya.

declare @Today date

Set @Today=getdate() --date will equal today    

Select *

FROM table_name
WHERE created <= @Today
Rob Fahndrich
sumber
-1
SELECT * FROM table_name WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) ,  '-', SUBSTRING( json_date, 7, 2 ) ,  '-', SUBSTRING(json_date, 3, 2 ) ) >= NOW();

json_date ["05/11/2011"]

vpgodara
sumber
Ini adalah solusi yang sangat mentah
IgniteCoders
-5

Anda dapat mengembalikan semua baris dan daripada menggunakan fungsi php Dateiff di dalam pernyataan if, meskipun itu akan menambah beban server.

if(dateDiff(date("Y/m/d"), $row['date']) <=0 ){    
}else{    
echo " info here";    
}
Koney L Visinko
sumber
4
ini sangat lambat dibandingkan dengan pilih database
IgniteCoders