2012-11-15 5 views
11

レコードが1か月分のデータベースから行を取得する必要があります。私はこの試みを試しました:DATEPART()によって行を選択

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

データベースには、11ヶ月の日付がある多くの行がありますが、結果は得られません。 誰でも助けてくれますか?感謝!

+1

[廃止処理](http://news.php.net/php.internals/53799)にあるように、mysql_ *関数を使用しないでください。代わりに[MySQLi](http://php.net/manual/en/book.mysqli.php)または[PDO](http://php.net/manual/en/book.pdo.php)を使用してください。より良いPHP開発者](http://jason.pureconcepts.net/2012/08/better-php-developer/)。 –

+0

date_column型は\tの日付 – user1827257

+0

でもエラー処理が最小でも、なぜこれが動作していないのか分かっているはずです。決してクエリーが成功したとは決して考えません。常にエラーをチェックしてください。 –

答えて

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

+1(MONTH()) –

+0

ありがとう!これは機能します。 – user1827257

2

date_columnにインデックスがあり、パフォーマンスが懸念される場合は、そのカラムに関数を適用しない方が良いです。あなたのDATEPARTで作業されていない場合

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

(それはまた、今年含まbecouse、あなたが尋ねまさにこのソリューションは、ないanwsersを行うことに注意してください) MYSQLを使用することができます:

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

先月にMyTableに挿入したすべてのレコードを返します。

関連する問題