2012-11-15 28 views
11

我需要從記錄是一個月的數據庫中獲取行。我試過這個SELECT:SELECT行由DATEPART()

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

在數據庫中有很多行在11個月有一個日期,但我沒有得到任何結果。 任何人都可以幫助我嗎?謝謝!

+1

請不要使用'mysql_ *'函數,因爲它們在[deprecation process](http://news.php.net/php.internals/53799)中。改爲使用[MySQLi](http://php.net/manual/en/book.mysqli.php)或[PDO](http://php.net/manual/en/book.pdo.php),[be一個更好的PHP開發人員](http://jason.pureconcepts.net/2012/08/better-php-developer/)。 –

+0

date_column類型是:\t date – user1827257

+0

即使最小的錯誤處理,你也會發現爲什麼這不起作用:'$ result = mysql_query(...)或die(mysql_error());'。永遠不會假設查詢成功。總是檢查錯誤。對於'MONTH()' –

回答

4
SELECT * FROM my_table WHERE MONTH(date_column)=11 
+0

+1 –

+0

謝謝!這工作。 – user1827257

2

如果您在date_column上有一個索引,並且您關心性能,最好不要在該列上應用函數。 (請注意,此解決方案,不要anwsers你問什麼,becouse它還涉及到一年)

-- 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)

0

如果DATEPART不工作MYSQL然後你可以使用:

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

它會返回上個月插入MyTable的所有記錄。