0

行が変更されるたびに、または最初に挿入するときに自動的に更新したいテーブルに列があります。UNIX_TIMESTAMP少なくとも1週間前のすべての行を取得したい場合、またはより簡単でより良い方法がある場合にこれが最も簡単であることがわかったので、関数を使用するように設定しました。

datetimeor型を使用できましたtimestampが、7 日以上前の行を取得する方法がわかりませんでした。

自動更新するDEFAULTなど、それぞれの機能に設定を入れただけですよね!?UNIX_TIMESTAMP

4

1 に答える 1

2

最も簡単な方法は、列を次のようにすることです。

CREATE TABLE foo(
whatever_id int auto_increment,
myTS timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(whatever_id)
);

このようにして、行に何かがあるときはいつでも、myTS は現在の日付で自動的に更新されます。CURRENT_TIMESTAMP のデフォルト値はオプションです。唯一の欠点は、MySQL では、テーブル内の 1 つの列DEFAULTON UPDATEのみCURRENT_TIMESTAMP. しかし、回避策があり、それは今では行き過ぎています。あなたが知る必要があるかどうか尋ねてください。

次に、7日以上前の行が必要な場合は、次のようにします

SELECT
*
FROM foo
WHERE
DATEDIFF(CURDATE(), myTS) >= 7
/*or
DATEDIFF(CURDATE(), myTS) >= DATE_SUB(NOW(), INTERVAL 1 WEEK)
*/

DATEDIFF関数の詳細については、こちらをご覧ください。

または別の方法は

SELECT
*
FROM foo
WHERE
DATE_ADD(myTS, INTERVAL 1 WEEK) <= CURDATE()

DATE_ADD上記と同じリンクの下で関数の詳細を読むことができます。

もちろん、単純に日付を手動で選択することもできます。

SELECT
*
FROM foo
WHERE
myTS < '2012-07-02'

ただし、timestamp列は日付時刻の値で構成されていることに注意してください。したがって、上記の query のようなものを記述すると、暗黙的に'2012-07-02 00:00:00'. したがって、次のようなものが必要な<= 2012-07-02 (the whole day)場合は、 と書く必要があります<= '2012-07-02 23:59:59'。これが混乱を招く場合に備えて、それを追加したかった.

于 2012-07-09T13:20:10.257 に答える