web-dev-qa-db-fra.com

SÉLECTIONNER la ligne par DATEPART ()

Je dois obtenir des lignes de la base de données où les enregistrements sont d'un mois. J'ai essayé ce SELECT:

$result = mysql_query("SELECT * FROM my_table WHERE DATEPART('month', date_column)=11");

Dans la base de données, il y a beaucoup de lignes qui ont une date dans le 11. mois, mais je n'ai aucun résultat .. Quelqu'un peut-il m'aider? Remercier!

12
user1827257

Il n'y a pas de fonction DATEPART dans MySQL. Utilisez MONTH(date_column) ou EXTRACT(MONTH FROM date_column) à la place.

19
MvG
    SELECT * FROM my_table WHERE MONTH(date_column)=11
5
Imre L

Si vous avez un index sur date_column et que vous vous préoccupez des performances, il est préférable de NE PAS appliquer de fonctions sur la colonne. (Sachez que cette solution, ne répond pas exactement à ce que vous avez demandé, car elle concerne également l'année)

-- For mysql specific:
SELECT * FROM my_table
WHERE date_column >= '2012-11-01' 
  and date_column < '2012-11-01' + INTERVAL 1 MONTH

(violon mysql)

-- For tsql specific:
SELECT * FROM my_table
WHERE date_column >= '2012-11-01'
  and date_column < DATEADD(month,1,'2012-11-01')

(violon tsql)

2
Luis Siquot

Si votre DATEPART ne fonctionne pas dans MYSQL, vous pouvez utiliser:

SELECT * FROM MyTable WHERE MONTH(joinningDate)=MONTH(NOW())-1 and YEAR(joinningDate)=YEAR(NOW());

Il renverra tous les enregistrements qui ont été insérés dans MyTable le mois dernier.

0
Shubham Verma