取り扱い 日時 MySQL のデータは、多くのデータベース操作、特にタスクのスケジュール設定や時間ベースの生成のタイムスタンプの処理に関して不可欠です。 MySQL は、ユーザーが日付値を操作して計算を実行し、必要に応じてフォーマットするのに役立つさまざまな日付と時刻の関数を提供します。
これらの関数を使用すると、開発者は計算を実行して日付の特定の部分を抽出したり、読みやすくするために出力をフォーマットしたりすることもできます。この記事では、最も一般的に使用される MySQL 日付関数を調べ、その構文を説明し、例を示し、それらを効果的に使用する方法を説明します。
MySQL の日付と時刻のデータ型について
MySQL で日付を操作する場合、データベース内の日付の形式が挿入時の入力データの形式と一致する必要があるため、特に初心者にとっては扱いにくい場合があります。多くの場合、単純な日付を使用するだけでなく、ユースケースに応じて日付と時刻の両方を保存する必要がある場合があります。ここは、 DATETIME そして TIMESTAMP データ型が関係します。
MySQL は、日付と時刻の値を保存するために次のデータ型を提供します。
1. 日付 :
- 形式 :
YYYY-MM-DD - 時刻要素を含まず、日付 (年月日) のみを格納するために使用されます。
2. 日時 :
- 形式 :
YYYY-MM-DD HH:MM:SS - 日付と時刻の両方を保存するので、日付とともに特定の時刻をキャプチャする必要がある場合に便利です。
3. タイムスタンプ :
- 形式 :
YYYY-MM-DD HH:MM:SS - に似ている
DATETIMEしかしTIMESTAMPタイムゾーンのサポートも含まれています。レコードが変更されると現在のタイムスタンプに自動的に更新されるため、長期にわたるレコードの変更を追跡するのに最適です。
4. 年 :
- 形式 :
YYYYまたはYY - 年だけを保存するために使用され、誕生年や会計年度の追跡など、年だけが必要なアプリケーションに役立ちます。
MySQL の日付と時刻の関数
ここで、日付と時刻のデータを効果的に操作およびクエリするために使用できる MySQL 日付関数について詳しく見ていきましょう。
1. NOW() - 現在の日付と時刻を取得します
の 今() 関数は現在の日付と時刻を取得します。 YYYY-MM-DD HH:MI:SS 形式。
クエリ:
SELECT NOW();
出力:

2. CURDATE() - 現在の日付のみを取得します
時刻部分を含まずに現在の日付のみが必要な場合は、次のように使用できます。 CURDATE() 日付を返します YYYY-MM-DD 形式。
クエリ:
SELECT CURDATE();
出力:

3. CURTIME() - 現在時刻のみを取得します
CURTIME() 関数は現在時刻を返します。 ひ:み:SS 日付を除いた形式です。
クエリ:
SELECT CURTIME();
出力:

4. DATE() - DATETIME 値から日付部分を抽出する
のDATE()関数は、データから日付部分のみを抽出します。DATETIMEまたはTIMESTAMP時間を捨てた価値観。
例: というテーブルの場合 users :
| ID | 名前 | 出生時間 |
|---|---|---|
| 4120 | 練習する | 1996-09-26 16:44:15.581 |
クエリ:
SELECT Name DATE(BirthTime)
AS BirthDate FROM Test;
出力:
| 名前 | 生年月日 |
|---|---|
| 練習する | 1996-09-26 |
5. EXTRACT() - 特定の日付部分を抽出する
EXTRACT()は、日、月、年などの日付の特定の部分を抽出するために使用されます。この関数は、日付のさまざまな部分を分析または比較する場合に特に役立ちます。いくつかの単位が考慮されますが、使用されるのは次のような一部だけです。 マイクロ秒、秒、分、時間、日、週、月、四半期、年など。 また、「date」は有効な日付表現です。
構文:
EXTRACT(日付からの単位);
日付を抽出するクエリ:
SELECT Name Extract(DAY FROM
BirthTime) AS BirthDay FROM Test;
出力:
| 名前 | 誕生日 |
|---|---|
| 練習する | 26 |
年を抽出するクエリ:
SELECT Name Extract(YEAR FROM BirthTime)
AS BirthYear FROM Test;
出力:
| 名前 | 誕生年 |
|---|---|
| 練習する | 1996年 |
秒を抽出するためのクエリ:
SELECT Name Extract(SECOND FROM
BirthTime) AS BirthSecond FROM Test;
出力:
| 名前 | 誕生二回目 |
|---|---|
| 練習する | 581 |
6. DATE_ADD() - 日付に間隔を追加します
の DATE_ADD() 関数を使用すると、日付または日付に時間間隔 (例: 日、月、年) を追加できます。DATETIME価値。
構文:
DATE_ADD(日付INTERVAL式型);
例: 以下の「」という名前のテーブルの場合、 テスト '
| ID | 名前 | 出生時間 |
|---|---|---|
| 4120 | 練習する | 1996-09-26 16:44:15.581 |
問い合わせ先 日付に 1 年を追加する
SELECT Name DATE_ADD(BirthTime INTERVAL
1 YEAR) AS BirthTimeModified FROM Test;
出力:
| 名前 | 生年月日変更済み |
|---|---|
| 練習する | 1997-09-26 16:44:15.581 |
日付に 30 日を追加するクエリ
SELECT Name DATE_ADD(BirthTime
INTERVAL 30 DAY) AS BirthDayModified FROM Test;
出力:
| 名前 | 誕生日変更済み |
|---|---|
| 練習する | 1996-10-26 16:44:15.581 |
日付に 4 時間を加算するクエリ
SELECT Name DATE_ADD(BirthTime INTERVAL
4 HOUR) AS BirthHourModified FROM Test;
出力:
| 名前 | 誕生二回目 |
|---|---|
| 練習する | 1996-10-26 20:44:15.581 |
7.DATEDIFF() – 2 つの日付の違いを見つける
この関数は、2 つの日付の間の日数を返します。
構文:
Javaのcase文
DATEDIFF(間隔日付 1 日付 2);
間隔 - 分/時間/月/年など
date1 および date2 - 日付/時刻式
問い合わせ先 2 つの日付の違いを見つける
SELECT DATEDIFF(day '2017-01-13' '2017-01-03') AS DateDiff;
出力:
| 日付の差分 |
|---|
8. DATE_FORMAT() - 日付と時刻のフォーマット
DATE_FORMAT() を使用すると、 日付 日時 または タイムスタンプ プレースホルダーを使用して値をカスタム形式に変換します。
構文:
DATE_FORMAT(日付形式);
日付は有効な日付であり、形式は日付/時刻の出力形式を指定します。使用できる形式は次のとおりです。
- %a-曜日の短縮名(日~土)
- %b-月の省略名 (1 月~12 月)
- %c-月の数値 (0 ~ 12)
- %D-英語のサフィックスが付いた月の日 (0th 1st 2nd 3rd)
- %d-日付の数値 (00 ~ 31)
- %e-日付の数値 (0 ~ 31)
- %f-マイクロ秒 (000000-999999)
- %H時 (00-23)
- %h-時間 (01-12)
- %I-時間 (01-12)
- %i-分の数値 (00 ~ 59)
- %j-年間通算日 (001-366)
- %k-時間 (0-23)
- %l-時間 (1-12)
- %M-月の名前 (1 月から 12 月)
- %m-月の数値 (00-12)
- %p-午前または午後
- %r-時間 12 時間 (hh:mm: ss の後に AM または PM)
- %S 秒 (00-59)
- %s-秒 (00-59)
- %T 時間 24 時間 (hh:mm: ss)
- %U-Week (00-53) (日曜日が週の最初の日)
- %u-週 (00-53) (月曜日が週の最初の日)
- %V-Week (01-53) 日曜日は %X とともに使用される週の最初の日です
- %v-Week (01-53) 月曜日は %x とともに使用される週の最初の日です
- %W-曜日名(日曜日~土曜日)
- %w-曜日 (0=日曜日、6=土曜日)
- %X-日曜日が週の最初の日となる週の年。%V とともに使用される 4 桁の数字
- %x-月曜が週の最初の日となる週の年。%v とともに使用される 4 桁の数字
- %Y-年の数字4桁
- %y-年の数値2桁
日付をフォーマットするためのクエリ
SELECT DATE_FORMAT('2025-04-10 12:34:56' '%W %M %d %Y') AS formatted_date;出力:
| フォーマットされた日付 |
|---|
| 2025年4月10日木曜日 |
MySQL で日付と時刻を操作するためのベスト プラクティス
1. 常に適切な日付形式を使用する
日付を挿入または更新するときは、MySQL の予期される形式 (YYYY-MM-DD YYYY-MM-DD HH:MI:SS)。これにより、クエリがエラーなく期待どおりの結果を返すことが保証されます。
2. TIMESTAMP に関するタイムゾーンの考慮事項
その間DATETIMEタイムゾーン情報は保存されませんTIMESTAMPそうです。アプリケーションがタイムゾーンに依存する場合 (国際アプリケーションなど)、使用を検討してください。TIMESTAMP異なるタイムゾーンを考慮する必要がある日付/時刻フィールドの場合。
3. クエリでの日付範囲の処理
日付範囲に基づいてデータをフィルタリングする場合 (特定の月または年からすべてのレコードを取得する場合など)、WHERE句。例:
SELECT * FROM orders
WHERE order_date BETWEEN '2025-01-01' AND '2025-01-31';
4. パフォーマンスに関する考慮事項
特に大規模なデータセットで日付と時刻の関数を操作する場合は、パフォーマンスへの影響に注意してください。次のような関数の使用は避けてください。NOW()またはCURDATE()でWHERE大きなテーブルを扱う場合、クエリの速度が低下する可能性があるためです。
結論
MySQL の日付と時刻の関数 ~にとって不可欠なツールです 取り扱い そして 操作する データベース内の一時データ。といった機能を使いこなすことで、NOW() CURDATE() DATE_ADD() DATEDIFF()そしてDATE_FORMAT()簡単に作業できます 時間ベースの計算 比較 そして フォーマット 。これらの関数を効果的に使用するための鍵は、関数をいつどのように使用するか、その構文と大規模なデータセットでのパフォーマンスへの影響を理解することです。この知識があれば、MySQL で日付と時刻に関連するすべてのニーズに対して、より効率的で正確かつスケーラブルなクエリを構築できるようになります。