Bagaimana cara memilih tanggal saja dari bidang DATETIME di MySQL?

115

Saya memiliki tabel di database MySQL yang sudah diatur DATETIME. Saya perlu masuk ke SELECTtabel ini hanya sebelum DATE dan tidak termasuk waktu.

Bagaimana saya SELECTdalam tabel ini hanya dengan tanggal dan melewati waktu, bahkan jika kolom tertentu diatur ke DATETIME?


Contoh

Sekarang: 2012-01-23 09:24:41

Saya perlu melakukan satu- SELECTsatunya untuk ini:2012-01-23

DiegoP.
sumber
kemungkinan duplikat masalah perbandingan tanggal MySQL
Marcus Adams

Jawaban:

165

SELECT DATE(ColumnName) FROM tablename;

Lebih lanjut tentang fungsi MySQL DATE () .

Balaswamy Vaddeman
sumber
Saya mencoba melakukan ini tetapi tidak berhasil $ query = "SELECT * FROM Profiles WHERE date (DateReg = '". $ Date. "')";
DiegoP.
2
tanggal (datereg) = 'dateHere'
Balaswamy Vaddeman
$ query = "PILIH * DARI Profil DI MANA date (DateReg) = '". $ date. "'"; Ini seharusnya berhasil. Pastikan kedua tanggal memiliki format yang sama, Jika tidak format tanggal $ sebelum menggunakan klausa in 'where ".
Clain Dsilva
Saya pikir Anda perlu berhati-hati dengan itu karena tidak akan menggunakan indeks pada ColumnName
d0x
Jangan lupa menambahkan simbol aksen Kuburan `sebelum dan sesudah nama kolom. Di beberapa versi MySql, ini mungkin menunjukkan tanggal sekarang.
pengguna2092317
40

Anda dapat menggunakan date_format

select DATE_FORMAT(date,'%y-%m-%d') from tablename

untuk zona waktu

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"
goel sushant
sumber
Ini berfungsi sempurna karena sekarang saya dapat memilih data dari hari-hari tertentu hanya dengan format tanggal '% d'.
mjwrazor
pilih DATE_FORMAT (tanggal, '% Y-% m-% d') dari tablename kecil "y" tidak mengembalikan tahun gunakan modal "Y" sebagai gantinya
Nirav Joshi
14

Anda dapat menggunakan select DATE(time) from appointment_detailsuntuk tanggal saja

atau

Anda dapat menggunakan select TIME(time) from appointment_detailswaktu saja

pengguna1061865
sumber
13

Coba gunakan
untuk hari ini:

SELECT * FROM `tbl_name` where DATE(column_name) = CURDATE()


untuk tanggal yang dipilih:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')
Mohammed Aly
sumber
2020: Terima kasih sobat!
MarcoZen
10

Di MYSQL kami memiliki fungsi yang disebut DATE_FORMAT (tanggal, format) . Dalam kasus Anda, pernyataan pilihan Anda akan menjadi seperti ini: -

SELECT DATE_FORMAT(dateTimeFieldName,"%a%m%Y") as dateFieldName FROM table_name

Untuk informasi lebih lanjut tentang fungsi TANGGAL dan WAKTU Mysql klik di sini.

Santosh D.
sumber
6

Cukup Anda bisa lakukan

SELECT DATE(date_field) AS date_field FROM table_name
krish kim
sumber
6

Saya mencoba melakukan SELECT DATE(ColumnName), namun ini tidak berfungsi untuk TIMESTAMPkolom karena disimpan dalam UTC dan tanggal UTC digunakan alih-alih mengonversi ke tanggal lokal. Saya perlu memilih baris yang berada pada tanggal tertentu di zona waktu saya, jadi menggabungkan jawaban saya untuk pertanyaan lain ini dengan jawaban Balaswamy Vaddeman untuk pertanyaan ini , inilah yang saya lakukan:

Jika Anda menyimpan tanggal sebagai DATETIME

Kerjakan saja SELECT DATE(ColumnName)

Jika Anda menyimpan tanggal sebagai TIMESTAMP

Muat data zona waktu ke MySQL jika Anda belum melakukannya. Untuk server Windows, lihat tautan sebelumnya. Untuk server Linux, FreeBSD, Solaris, dan OS X Anda akan melakukan:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Kemudian format kueri Anda seperti ini:

SELECT DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York'))

Anda juga dapat meletakkan ini di WHEREbagian kueri seperti ini (tetapi perhatikan bahwa indeks pada kolom itu tidak akan berfungsi):

SELECT * FROM tableName
WHERE DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York')) >= '2015-02-04'

(Jelas menggantikan America/New_Yorkzona waktu lokal Anda.)


Satu-satunya pengecualian untuk ini adalah jika zona waktu lokal Anda adalah GMT dan Anda tidak melakukan penghematan siang hari karena waktu lokal Anda sama dengan UTC.

Mike
sumber
3

Coba di SELECT * FROM Profiles WHERE date(DateReg)=$datemana $ date dalam tttt-bb-hh

kalau tidak SELECT * FROM Profiles WHERE left(DateReg,10)=$date

Bersulang

Richie
sumber
3

Anda bisa mencoba ini:

SELECT CURDATE();

Jika Anda memeriksa yang berikut:

SELECT NOW(); SELECT DATE(NOW()); SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');

Anda dapat melihat bahwa itu membutuhkan waktu lama.

aymsoft
sumber
2
Select * from table_name where date(datetime)
Gurpreet Dhanoa
sumber
2

Silakan coba jawaban ini.

SELECT * FROM `Yourtable` WHERE date(`dateField`) = '2018-09-25'
Sai Charan Tsalla
sumber
1

Menggunakan DATE_FORMAT

select DATE_FORMAT(date,'%d') from tablename =>Date only

contoh:

select DATE_FORMAT(`date_column`,'%d') from `database_name`.`table_name`;
Hendry Tanaka
sumber
1
SELECT DATE_FORMAT(NOW() - INTERVAL FLOOR(RAND() * 14) DAY,'%Y-%m-%d');

Yang ini bisa digunakan untuk mendapatkan tanggal dalam format 'yyyy-mm-dd'.

zaynomer
sumber
1

jika kolom waktu ada di stempel waktu, Anda akan mendapatkan nilai tanggal dari stempel waktu tersebut menggunakan kueri ini

SELECT DATE(FROM_UNIXTIME(time)) from table 
Rosmin
sumber
0

Untuk benar-benar memberikan solusi yang berfungsi untuk pertanyaan ini:

SELECT ... WHERE `myDateColumn` >= DATE(DATE_FORMAT(NOW(),'%Y-%m-%d'));

Jelas, Anda bisa mengubah fungsi NOW () ke tanggal atau variabel apa pun yang Anda inginkan.

Mo'in Creemers
sumber