web-dev-qa-db-ja.com

DATEPART()による行の選択

レコードが1か月のデータベースから行を取得する必要があります。私はこのSELECTを試しました:

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

データベースには、11か月の日付を持つ行が多数ありますが、結果は得られません。誰も私を助けることができますか?感謝!

14
user1827257

MySQLには DATEPART 関数はありません。代わりに MONTH(date_column) または EXTRACT(MONTH FROM date_column) を使用してください。

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

Date_columnにインデックスがあり、パフォーマンスが心配な場合は、列に関数を適用しない方が良いです。 (このソリューションは、あなたが尋ねたものを正確に答えないでください、それはまた年を含むので注意してください)

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

2
Luis Siquot

DATEPARTがMYSQLで動作していない場合は、次を使用できます:

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

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

0
Shubham Verma