2017-06-25 10 views
1

に完全ではない私のようなものを発見した:日によってDBから選択しても、日、月、年

SELECT * FROM POSTY WHERE MONTH(data_dodania) = 5 AND YEAR(data_dodania) = 2017 

をしかし、それは私が探していたものを少しではありません。そして恐らくそれは存在しないかもしれません。 それが私が疑問を持っている理由です。チェックデータをもっとスマートにすることは可能でしょうか?

のようにwhere date=201705(初年度、2月)。

これは動作しません私は試したことを知っています。しかし、私はこれをタイプして、私が求めていることを示しています。

Idk、where date='May2017などですか?

答えて

1

MySQLのDATE_FORMATを使用すると、日付の書式を任意に設定できます。例えば。

SELECT * 
FROM POSTY 
WHERE DATE_FORMAT(data_dodania, '%Y%m') = '201705'; 

同様に、形式に:あなたはこの形式で日付を持っている場合、あなたが行、例えばをフィルタリングするWHERE状態にDATE_FORMATを使用することができ、今

SELECT DATE_FORMAT(data_dodania, '%Y%m') 
FROM POSTY; 

:次のクエリは、YYYYMM形式で日付をフォーマットMay2017 printは%M%Yです(書式には書式と例のリストがあります)。

+0

ニース、ありがとうございました:)。 –

+0

@DarshanMehtaこれは、DATE_FORMATのような関数を使うときにインデックスを使うことができないので、これを使うのは非常に疲れています。各行は行をスキャンし、実行し、比較して範囲を選択する必要があります。インデックスは使用できません。 – FrankerZ

+0

私は@KrystianPolskaが日付を書式化したい(またはその形式の日付をすでに持っている)と思っています。その場合は、比較のために 'DATE_FORMAT'関数を使う必要があります。 –

1

日付を使用してクエリを実行する最善の方法は、検索する範囲を指定することです。data_dodaniaフィールドのインデックスを利用できるようになります。関数を使用すると、関数を実行して値を比較するために、問合せでROW SCANを使用します。私は非常に範囲を使用することをお勧め:

SELECT * FROM POSTY WHERE data_dodania >= '2017-05-01' AND data_dodania <= '2017-05-31' 

もう一つの方法は、構文の間で使用することです(これは文法的に上記と同じです):

SELECT * FROM POSTY WHERE data_dodania BETWEEN '2017-05-01' AND '2017-06-01' 
関連する問題