"今年"(今年)に追加された行だけをデータベースから戻したいと思います。各行の作成日は、の小文字の形式でタイムスタンプとして保存されます。現在の年のタイムスタンプとmysqlの保存されたタイムスタンプを比較します
私が想像する一つの方法は、今年のタイムスタンプ範囲を取得し、この範囲に収まる行だけを選択することです。私はgoogleを持っているが、成功していない。 指定された年とデータベースの保存タイムスタンプを比較する方法はありますか?
"今年"(今年)に追加された行だけをデータベースから戻したいと思います。各行の作成日は、の小文字の形式でタイムスタンプとして保存されます。現在の年のタイムスタンプとmysqlの保存されたタイムスタンプを比較します
私が想像する一つの方法は、今年のタイムスタンプ範囲を取得し、この範囲に収まる行だけを選択することです。私はgoogleを持っているが、成功していない。 指定された年とデータベースの保存タイムスタンプを比較する方法はありますか?
のための通常のパターンがあります。
式を使用して範囲の開始点と終了点を導き出すことができます。この場合、年の初めと翌年の初めです。
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を表す(小数点以下の値を返すまたは式)小数点以下の値を提供する必要があります。
不在のより正確な値が格納されているものの定義、およびどのような値が表すこれらの値をさかのぼり、私はより具体的な例を与えることはできません。
これは私が予想していた以上です。本当に感謝しております。 – user348078
あなたは
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
あなたの質問を更新し、作成日付のデータ形式である何のデータとあなたのテーブルスキーマ – scaisEdge
のサンプルを示し??文字列またはタイムスタンプ?? – reza
それは十進数型として格納されたタイムスタンプです - 小数(50,0) – user348078