2012-03-05 6 views
1

これは、2012年(私は人のregisterDate値は現在の年と同じであるかどうかを確認するために適切なクエリを書くことができますどのように私のStudentテーブルはどのように選択することができます

Id(int) | Name(varchar) | registerDate(Date) 
1   John   2012-01-01 

です)?

+5

'YEAR(registerDate)= YEAR(CURDATE())' –

+3

上記は、MySQL用です。 MS SQL Serverは 'GETDATE()'を使用します。使用しているRDBMSを投稿してください。 –

+0

ありがとう@マイケルしかし、なぜ私はそれを受け入れることができる答えとしてそれを送信していない:)あなたの助けをありがとう。 –

答えて

3
SELECT * 
FROM Student 
WHERE YEAR(registerDate) = YEAR(getdate()) 
2

SQLのあなたの香りは、Microsoft TSQLは、この作品で偶然場合:

SELECT * FROM Student Where datepart(yy,registerDate) = datepart(yy,GetDate()) 
6

最も直接的な解決策は、あなたが使用しているSQLのどんな味にYEARまたはDATEPART機能を使用することです。これはおそらくあなたのニーズを満たしますが、テーブルを検索して一致するものがある場合は、この方法ではインデックスを使用できません。この場合、BETWEEN演算子を使用する方が効率的です。

SELECT id, name, registerDate 
FROM Student 
WHERE registerDate BETWEEN 2012-01-01 and 2012-12-31 

現在の年の最初と最後の日をどのように生成するかは、SQLの味によって異なります。

範囲を使用しているため、インデックスを利用できます。関数を使用して各行の年を計算する場合は、関連する行を直接検索するのではなく、表の各行について計算する必要があります。

+0

プラス私のよりもはるかに徹底的な答えのために1つ:) – RThomas

0

これは、SQLクエリのために働く必要があります。

SELECT * FROM myTable 
WHERE month_column = MONTH(CURDATE()) AND 
year_column =YEAR(CURDATE()) 
関連する問題