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.

Jawaban:


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

Tapi saya pikir maksud Anda created < today


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


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.


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'


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;

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')

2
SELECT * FROM users WHERE created >= now()

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

-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"]


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";    
}

4
ini sangat lambat dibandingkan dengan pilih database
IgniteCoders
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.