web-dev-qa-db-fra.com

Filtrer par formatage MYSQL datetime

J'ai une table Mysql qui est utilisée pour un fichier journal sur cette table. Il y a un champ appelé 'log_date'. Il stocke la date au format suivant (% Y-% m-% d% H:% i.% S ) .Dans la base de données, les dates ressemblent à quelque chose de ce 2013-20-05 00: 00.00. Disons que la date d'aujourd'hui est le 2013-20-05. Et j'ai des fichiers journaux du 2013-01-01 à aujourd'hui. Si je lance une requête comme celle-ci:

SELECT * FROM log_table
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') < '2013-05-05 00:00.00'

Cela renvoie toutes les lignes de la base de données, y compris les lignes supérieures à 2013-05-05 00: 00.00

Et si j'inverse le <(moins alors) en un> (plus grand que) avec une requête qui ressemble à ceci: 

SELECT * FROM log_table
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') > '2013-05-05 00:00.00'

Ensuite, il retourne ZERO lignes. Je pense que l'horodatage est la cause du problème. J'ai déjà travaillé avec le format de date mais pas le format DateTime. Pourquoi cela arrive-t-il?

13
Ryan Bauer

log_date doit être du type de données DateTime. Il est beaucoup plus simple d’utiliser la fonction MySQL DATE. Quelques exemples

SELECT * FROM log_table
WHERE DATE(log_date) < '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) > '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) BETWEEN '2013-04-05' AND '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) BETWEEN DATE(CURRENT_DATE() - INTERVAL 2 WEEK) AND 
DATE(CURRENT_DATE() + INTERVAL 4 DAY)
22
blotto

Vous pouvez essayer avec ça ..

  WHERE DATE_FORMAT(AUCTION_DATE, '%Y%m%d') >= DATE_FORMAT('2013/5/18', '%Y%m%d')

Vous pouvez également obtenir la date d'aujourd'hui en utilisant now () function.

0
Cataclysm