web-dev-qa-db-fra.com

MySQL sélectionne des lignes avec une date comme

Dans MySQL, j'ai cette requête

SELECT DISTINCT date, descr FROM book ORDER BY date

La date est au format yyyy-mm-dd

Je souhaite sélectionner uniquement les livres de janvier 2012. J'ai essayé d'utiliser like mais cela ne fonctionne pas.

Des idées?

15
Axxess

En utilisant DATE_FORMAT fonction

SELECT DISTINCT date, descr FROM book 
WHERE DATE_FORMAT(date, '%Y %m') = DATE_FORMAT('2012-01-01', '%Y %m')
ORDER BY date

Ou en utilisant les fonctions MONTH et YEAR

SELECT DISTINCT date, descr FROM book 
WHERE Month(date) = Month('2012-01-01')
AND Year(date) = Year('2012-01-01')
ORDER BY date;

Ou en utilisant les fonctions BETWEEN

SELECT DISTINCT date, descr FROM book 
WHERE date BETWEEN '2012-01-01'
AND '2012-01-31'
ORDER BY date;

Ou en utilisant <= et >= opérateurs

SELECT DISTINCT date, descr FROM book 
WHERE date >= '2012-01-01'
AND date <= '2012-01-31'
ORDER BY date;

Voir ce SQLFiddle

29
hims056

Vous pouvez utiliser >= et <= opérateurs ici. Vérifiez le code ci-dessous:

SELECT *
FROM book
WHERE date >= '2012-01-01' AND date <= '2012-01-31'
6
mtk

Essaye ça:

SELECT DISTINCT date, descr FROM book WHERE YEAR(date) = '2012' and MONTH(date) = '1'

Cela fonctionne si votre colonne "date" est un champ de date MySQL.

3
j0nes

Si vous êtes catégorique sur le fait que vous souhaitez utiliser la syntaxe LIKE, vous pouvez d'abord convertir la date en CHAR:

SELECT DISTINCT date, descr From book WHERE CAST (date AS char) COMME '2012-01%' ORDER BY date;

1
Rolf
SELECT DISTINCT date, descr
FROM book
WHERE YEAR = DATE(NOW()) AND MONTH(date) = '1'

Cela vous donnera les livres de cette année

0
Muhammad Raheel

Utiliser comme fonctionne aussi. Avec @ hims056 violon, vous pouvez le tester:

SELECT DISTINCT ID, date FROM book 
WHERE date LIKE '2012-01%'
ORDER BY date;

Cependant, il n'est pas habituel d'utiliser un filtre de date similaire, pour moi, il est plus naturel d'utiliser> = et <=, ou entre. En outre, il y a un avantage en termes de performances.

0
Ferran