2016-12-03 3 views
0

私はmysqlで特定の年を持つすべての行を選択しようとしています。 datetimeは2016-12-02 10:00:00のような形式になっていますので、ワイルドカードを使用しています。しかし、私はmysqlはリクエストにタイムスタンプを含むワイルドカードを使用します

SELECT * FROM all-data.prices where YEAR(timestamp)= "2005"; 

SELECT * FROM all-data.prices where timestamp= "2005%" ; をしようと、それは私のために仕事をdidntの。

このようなselect文の正しい構文は何ですか?

+0

本当の 'timestamp'カラムを持っていますか、それとも' varchar'ですか? – Mureinik

+0

@Mureinik - 実際のタイムスタンプの列はありません –

+0

うーん... 'year'を使うのはうまくいったはずです。いくつかのサンプルデータとその結果を共有できますか?ここ – Mureinik

答えて

1

WHERE句のフィールドでFUNCTIONを使用することはお勧めしません。それから、MySQLは比較する前にすべての行からYEAR(タイムスタンプ)を計算しなければなりません。したがって、それはFULL TABLE SCANであり、INDEXを使用することはできません。

良好であった(1がある場合)次に、MySQLはあなたもLIKEキーワード

を使用しなければなりません%を使用するには

をINDEXを使用することができる範囲で

SELECT * from your_table WHERE `timestamp` >= '2015-01-01 00:00:00' AND `timestamp` < '2016-01-01 00:00:00'; 

をタイムスタンプを比較することですあなたのサンプル中

SELECT '2015-01-01 23:50:00' LIKE '2015%'; 

SELECT * from your_table WHERE `timestamp` LIKE '2015%'; 
関連する問題