Comment sélectionner uniquement la date dans un champ DATETIME dans MySQL?

115

J'ai une table dans la base de données MySQL qui est configurée avec DATETIME. Je dois SELECTdans ce tableau uniquement par DATE et à l'exclusion de l'heure.

Comment puis-je SELECTdans ce tableau par date uniquement et en contournant l'heure, même si cette colonne spécifique est définie sur DATETIME?


Exemple

C'est maintenant: 2012-01-23 09:24:41

Je dois faire un SELECTseul pour ça:2012-01-23

DiegoP.
la source
duplication possible du problème de comparaison de dates MySQL
Marcus Adams

Réponses:

165

SELECT DATE(ColumnName) FROM tablename;

Plus d'informations sur la fonction MySQL DATE () .

Balaswamy Vaddeman
la source
J'essaye de faire ceci mais cela ne fonctionne pas $ query = "SELECT * FROM Profiles WHERE date (DateReg = '". $ Date. "')";
DiegoP.
2
date (datereg) = 'dateHere'
Balaswamy Vaddeman
$ query = "SELECT * FROM Profiles WHERE date (DateReg) = '". $ date. "'"; Cela devrait fonctionner. Assurez-vous que les deux dates sont du même format, sinon formatez la date $ avant de l'utiliser dans la clause «where».
Clain Dsilva
Je pense que vous devez faire attention à cela car il n'utilisera pas d'index sur le ColumnName
d0x
N'oubliez pas d'ajouter le symbole d'accent grave `avant et après le nom de la colonne. Dans certaines versions de MySql, il peut afficher la date actuelle.
user2092317
40

vous pouvez utiliser date_format

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

pour le fuseau horaire

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"
sushant goel
la source
Cela fonctionne parfaitement car je peux maintenant sélectionner des données de certains jours en ayant simplement le format de date '% d'.
mjwrazor
sélectionnez DATE_FORMAT (date, '% Y-% m-% d') du nom de la table petit "y" ne renvoie pas l'année utiliser le capital "Y" à la place
Nirav Joshi
14

Vous ne pouvez utiliser que select DATE(time) from appointment_detailspour la date

ou

Vous ne pouvez utiliser que select TIME(time) from appointment_detailspour le temps

user1061865
la source
13

Essayez d'utiliser
pour aujourd'hui:

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


pour la date sélectionnée:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')
Mohammed Aly
la source
2020: Merci mon pote!
MarcoZen le
10

Dans MYSQL, nous avons une fonction appelée DATE_FORMAT (date, format) . Dans votre cas, votre déclaration de sélection deviendra comme ceci: -

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

Pour plus d'informations sur les fonctions Mysql DATE et TIME, cliquez ici.

Santosh D.
la source
6

Vous pouvez simplement faire

SELECT DATE(date_field) AS date_field FROM table_name
krish kim
la source
6

J'ai essayé de faire un SELECT DATE(ColumnName), mais cela ne fonctionne pas pour les TIMESTAMPcolonnes car elles sont stockées en UTC et la date UTC est utilisée au lieu de la conversion en date locale. J'avais besoin de sélectionner des lignes qui étaient à une date spécifique dans mon fuseau horaire, donc en combinant ma réponse à cette autre question avec la réponse de Balaswamy Vaddeman à cette question , voici ce que j'ai fait:

Si vous stockez des dates sous DATETIME

Fais juste SELECT DATE(ColumnName)

Si vous stockez des dates sous TIMESTAMP

Chargez les données de fuseau horaire dans MySQL si vous ne l'avez pas déjà fait. Pour les serveurs Windows, consultez le lien précédent. Pour les serveurs Linux, FreeBSD, Solaris et OS X, procédez comme suit:

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

Puis formatez votre requête comme ceci:

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

Vous pouvez également mettre ceci dans la WHEREpartie de la requête comme ceci (mais notez que les index sur cette colonne ne fonctionneront pas):

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

(Évidemment, remplacez America/New_Yorkvotre fuseau horaire local.)


La seule exception à cela est si votre fuseau horaire local est GMT et que vous ne faites pas d'heure d'été car votre heure locale est la même que UTC.

Mike
la source
3

Essayer SELECT * FROM Profiles WHERE date(DateReg)=$date où $ date est dans aaaa-mm-jj

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

À votre santé

Richie
la source
3

Vous pouvez essayer ceci:

SELECT CURDATE();

Si vous vérifiez ce qui suit:

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

Vous pouvez voir que cela prend beaucoup de temps.

aymesoft
la source
2
Select * from table_name where date(datetime)
Gurpreet Dhanoa
la source
2

Veuillez essayer cette réponse.

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

Utilisation DATE_FORMAT

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

exemple:

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

Celui-ci peut être utilisé pour obtenir la date au format «aaaa-mm-jj».

Zaynomer
la source
1

si la colonne de temps est sur l'horodatage, vous obtiendrez la valeur de la date à partir de cet horodatage en utilisant cette requête

SELECT DATE(FROM_UNIXTIME(time)) from table 
Rosmin
la source
0

Dans l'intérêt de mettre réellement une solution de travail à cette question:

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

Évidemment, vous pouvez changer la fonction NOW () en n'importe quelle date ou variable que vous voulez.

Mo'in Creemers
la source