VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
DATE(日付のみ)、TIME(時刻のみ)、DATETIME(日付 + 時刻、タイムゾーンなし)、および TIMESTAMP(日付 + 時刻、UTC で格納され、セッションのタイムゾーンで表示される)です。タイムゾーンの扱いの詳細は、MySQL のタイムスタンプとタイムゾーンを参照してください。
現在の日付と時刻の取得
NOW() はステートメントの開始時に 1 回だけ評価されます。同じ INSERT のすべての行が同じタイムスタンプを得ます。SYSDATE() は呼び出されるたびに評価されます。
日付の書式設定
DATE_FORMAT は、書式文字列を使って日付または日時を文字列に変換します。
文字列から日付への解析
STR_TO_DATE は、同じ書式指定子を使って文字列を日付に変換します。
日付の演算
DATE_ADD / DATE_SUB — 間隔を加算または減算します。SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR。
+ と - 演算子による短縮形:
DATEDIFF は日数だけを数え、時刻は数えません。時刻を考慮した差分には TIMESTAMPDIFF を使います。
TIMESTAMPDIFF(unit, from, to) — from が to より前に来ることに注意してください。
日付の部分の抽出
EXTRACT / YEAR / MONTH / DAY:期間への切り捨て
データを月、週、または日でグループ化するには、日時を期間の境界に切り捨てます。Unix タイムスタンプ
よくあるパターン
過去 30 日間のレコード:よくある質問
NOW() と SYSDATE() の違いは何ですか?
NOW() は、ステートメントの実行が始まった時点のタイムスタンプを返します。1 つの INSERT または UPDATE のすべての行が同じ値を得ます。SYSDATE() は呼び出された瞬間の実際の時計の時刻を返すため、ループで挿入された行は異なる値を得ます。トランザクション内の一貫性が重要な監査タイムスタンプには、ほぼ常に NOW() が正しい選択です。
INTERVAL 1 MONTH を指定した DATE_ADD が月末で奇妙に振る舞うのはなぜですか?
MySQL は最後の有効な日に丸めます。DATE_ADD('2024-01-31', INTERVAL 1 MONTH) は 2024-02-29(うるう年)または 2024-02-28 を返します。これは想定どおりの動作です。「2 月 31 日」は存在しません。予測可能な月の演算が必要な場合は、先に月の初めに切り捨ててください。
トラブルシューティング
関連項目
- MySQL のタイムスタンプとタイムゾーン — 日付関数が操作する格納型
- MySQL の BETWEEN — 日付の範囲を
>=と<で書くほうが安全な理由