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


Réponses:


165

SELECT DATE(ColumnName) FROM tablename;

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


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

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


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

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.


6

Vous pouvez simplement faire

SELECT DATE(date_field) AS date_field FROM table_name

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.


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é


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.



2

Veuillez essayer cette réponse.

SELECT * FROM `Yourtable` WHERE date(`dateField`) = '2018-09-25'

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`;

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».


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 

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.