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?
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;
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'
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.
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;
SELECT DISTINCT date, descr
FROM book
WHERE YEAR = DATE(NOW()) AND MONTH(date) = '1'
Cela vous donnera les livres de cette année
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.