119 votes

Sélection de mySQL basée uniquement sur le mois et l'année

J'ai une colonne dans ma base de données MySQL qui contient quelques lignes. L'une de ces lignes est une DATE, comme ceci : 2012-02-01

Ce que je veux réaliser, c'est faire un SELECT avec PHP basé uniquement sur l'année et le mois.

La logique du SELECT sera la suivante :

$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";

Le mois et l'année spécifiques seront transmis à partir d'un fichier de type $_POST comme ceci $_POST['period']="2012-02";

Comment puis-je le faire ?

2 votes

Vous pouvez utiliser l'instruction BETWEEN

8voto

Chirag Points 21

Pour obtenir les données spécifiques du mois et de l'année à partir de la table

SELECT * FROM table WHERE DATE_FORMAT(column_name,'%Y-%m') = '2021-06'

5voto

T30 Points 170

Vous pouvez utiliser mysql DATE_FORMAT ne considère que la partie année+mois de la date :

select * from table where DATE_FORMAT(column, '%Y%m') = '202105';

2voto

Hristo Petev Points 309

La logique sera :

SELECT * FROM objects WHERE Date LIKE '$_POST[period]-%';

El LIKE L'opérateur sélectionnera toutes les lignes qui commencent par $_POST['period'] suivi du tiret et du jour du mois.

http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - Quelques informations supplémentaires

4 votes

-1 Opérations de type String sur des données représentées en interne comme un entier ! ? Vous êtes sérieux ?

0 votes

@Yaroslav Oui, très efficace, je suppose :D

2 votes

Sans index. Il convertit d'abord la valeur de la date en chaîne de caractères, puis fait correspondre cette chaîne. Dans MySQL, tout type de colonne peut être interrogé par LIKE. Mais cela fonctionnera quand même :D

2voto

Andreas Helgegren Points 1540

Vous pouvez faire comme ça :

$q="SELECT * FROM projects WHERE Year(Date) = '$year' and Month(Date) = '$month'";

1 votes

Cela n'utilise pas non plus d'index

2voto

chintan mahant Points 128

Ici, FIND record par MONTH et DATE dans mySQL

Voici la valeur de votre POST $_POST['period']="2012-02";

Juste, exploser la valeur par le tiret $Period = explode('-',$_POST['period']);

Obtenir un tableau à partir de la valeur explode :

Array ( [0] => 2012 [1] => 02 )

Mettre la valeur dans la requête SQL :

SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';

Obtenez le résultat par MOIS et ANNÉE.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X