SELECT row by DATEPART() (Programare, Php, Mysql, Sql, Datepart)

utilizator1827257 a intrebat.

Am nevoie să obțin rânduri din baza de date în care înregistrările sunt de o lună. Am încercat acest SELECT:

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

În baza de date sunt o mulțime de rânduri care au data în luna 11., dar nu obțin nici un rezultat. mă poate ajuta cineva? Mulțumesc!

Comentarii

  • Vă rog să nu folosiți mysql_* funcții, deoarece acestea se află în proces de depreciere. Utilizați MySQLi sau PDO în schimb și fiți un dezvoltator PHP mai bun. –  > Por Jason McCreary.
  • cu o gestionare minimă a erorilor, ați fi aflat de ce nu funcționează: $result = mysql_query(...) or die(mysql_error());. nu presupuneți NICIODATĂ că o interogare a avut succes. Verificați ÎNTOTDEAUNA dacă există erori. –  > Por Marc B.
4 răspunsuri
MvG

Nu există DATEPART în MySQL. Folosiți MONTH(date_column) sau EXTRACT(MONTH FROM date_column) în locul acesteia.

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

Luis Siquot

Dacă aveți un index pe data_coloană și vă îngrijorează performanța, este mai bine să NU aplicați funcții asupra coloanei. (Rețineți că această soluție nu răspunde exact la ceea ce ați cerut, deoarece implică și anul).

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

(mysql fiddle)

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

(tsql fiddle)

Shubham Verma

Dacă DATEPART nu funcționează în MYSQL, atunci puteți utiliza:

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

Acesta va returna toate înregistrările care au fost inserate în MyTable în ultima lună.