bugfix> mysql > 投稿

ターミナル経由でMySqlを使用しています。以下は、テーブルの作成に使用したコマンドですが、日付をYYYY-MM-DD HH:MM:SSで表示しています(例:2018-05-25 14:12:47)

create table test (foo int, ts timestamp default CURRENT_TIMESTAMP);

しかし、デフォルトでは(YYYY-MM-DD)形式でデータを挿入するたびに昨日の日付が必要です。

コマンドを見つけるのを手伝ってください。

おかげで、 アミット

回答 2 件
  • MySQLの公式ドキュメントhttps://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-addによると、次のようにできます。

    作成時に「昨日」を保存する場合:

    ts TIMESTAMP NOT NULL DEFAULT NOW() - INTERVAL 1 DAY
    
    

    更新ごとに「昨日」を保存する場合:

    ts TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW() - INTERVAL 1 DAY
    
    

    この回答によると、NOW()-1日からレコードを選択します。

    NOW() returns a DATETIME.

    And INTERVAL works as named, e.g. INTERVAL 1 DAY = 24 hours.

    So if your script is cron'd to run at 03:00, it will miss the first three hours of records from the 'oldest' day.

    To get the whole day use CURDATE() - INTERVAL 1 DAY. This will get back to the beginning of the previous day regardless of when the script is run.

    それが役に立てば幸い!

  • MySQLのデフォルト値は定数でなければなりません。関数または式にすることはできません(CURRENT_TIMESTAMPを除く)。

    ソース:http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html

    さらに、要件に合わせてテーブルにトリガーを追加できます

    制約なしで単純にテーブルを作成する

    create table test (foo int, ts timestamp );
    
    

    次に、このテーブルにトリガーを追加します

    CREATE TRIGGER settime
    BEFORE INSERT on test 
    FOR EACH ROW BEGIN
       IF new.`ts ` is null THEN
        SET new.`ts ` = DATE_ADD(NOW(), INTERVAL -1 DAY);
        END IF;
    END;
    
    

あなたの答え