2016-12-30 7 views
0

"今年"(今年)に追加された行だけをデータベースから戻したいと思います。各行の作成日は、の小文字の形式でタイムスタンプとして保存されます。現在の年のタイムスタンプとmysqlの保存されたタイムスタンプを比較します

私が想像する一つの方法は、今年のタイムスタンプ範囲を取得し、この範囲に収まる行だけを選択することです。私はgoogleを持っているが、成功していない。 指定された年とデータベースの保存タイムスタンプを比較する方法はありますか?

+3

あなたの質問を更新し、作成日付のデータ形式である何のデータとあなたのテーブルスキーマ – scaisEdge

+0

のサンプルを示し??文字列またはタイムスタンプ?? – reza

+0

それは十進数型として格納されたタイムスタンプです - 小数(50,0) – user348078

答えて

1

のための通常のパターンがあります。

式を使用して範囲の開始点と終了点を導き出すことができます。この場合、年の初めと翌年の初めです。

EDIT

creation_date列のデータ型は、一例として、そして、DATE、DATETIME、またはTIMESTAMPの形式である場合:

WHERE t.creation_date >= DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 0 MONTH 
    AND t.creation_date < DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 12 MONTH 

私たちは、SELECT文を使用して式をテストすることができますに

SELECT DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 0 MONTH AS d1 
    , DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 12 MONTH AS d2 

ret 「裸」の列に比較を行う壷

d1   d2   
---------- ---------- 
2016-01-01 2017-01-01 

は1つが利用可能である場合、MySQLは、適切なインデックスに範囲スキャン操作を使用することができますパターンです。

関数にカラムをラップすると、MySQLはテーブル内のすべてのローの関数を評価します。だから私はこのパターンをお勧めしません。しかし、例として:

WHERE YEAR(t.creation_date) = YEAR(NOW()) 

EDIT

編集した質問はcreated_date列が小数点データ型として格納されていると言います。

格納された値である限りカノニカル

...、同じパターン(すなわち、後日の値は常に以前の日付の値を「より大きい」と比較する場合)適用...裸の列と範囲の開始点と終了点を比較します。

WHERE t.decimal_col >= beginning_of_this_year 
    AND t.decimal_col < beginning_of_next_year 

ちょうどbeginning_of_this_yearとbeginning_of_next_yearを表す(小数点以下の値を返すまたは式)小数点以下の値を提供する必要があります。

不在のより正確な値が格納されているものの定義、およびどのような値が表すこれらの値をさかのぼり、私はより具体的な例を与えることはできません。

+0

これは私が予想していた以上です。本当に感謝しております。 – user348078

0

あなたは

STR_TO_DATE('31/12/2016 8:06:26 AM', '%d/%m/%Y %r') 

str_to_date機能を利用することができますし、範囲に裸の列を比較する...説明するように、フィルタ

where year(STR_TO_DATE('31/12/2016 8:06:26 AM', '%d/%m/%Y %r')) = 2016 
関連する問題