MySQLの日付と時刻関数:入門ガイド

こんにちは、未来のデータベース魔法使いさんたち!今日は、MySQLの日付と時刻関数の世界に楽しく飛び込んでいきましょう。これまでコードを書いたことがない方もご安心ください。あなたの親切なガイドとして、私はステップバイステップで説明します。このチュートリアルの終わりには、プロのように日付と時刻を操作できるようになるでしょう!

MySQL - Date and Time Functions

日付と時刻関数の重要性

まず、ちょっとした話をシェアしましょう。数年前、私の生徒の一人がバースデーお知らせアプリを作成していました。彼は日付の計算に苦しみましたが、MySQLの日付関数を発見した瞬間、彼のアプリは友達のバースデーまであと何日かを通知できるようになりました。まるで魔法のようです!これが、これらの関数をマスターする力です。

基本的なことから始めよう:現在の日付と時刻

まずは基本から始めましょう。MySQLは現在の日付と時刻を取得するための複数の関数を提供しています。以下に最も一般的なものを挙げます:

関数 説明 例出水
NOW() 現在の日付と時刻 2023-05-15 14:30:00
CURDATE() 現在の日付 2023-05-15
CURTIME() 現在の時刻 14:30:00

これらを実際に使ってみましょう:

SELECT NOW(), CURDATE(), CURTIME();

このクエリは、現在の日付と時刻、現在の日付、現在の時刻を返します。すごく便利ですね?

出力の理解

NOW()関数はdatetime値を返します。これは日付と時刻の両方を含んでいます。CURDATE()は'YYYY-MM-DD'形式の単なる日付を返し、CURTIME()は'HH:MM:SS'形式の単なる時刻を返します。

日付と時刻の一部を抽出

さて、datetime値があって、その特定の部分を抽出したいとしましょう。MySQLは以下のような便利な関数でそれをサポートしています:

関数 説明 例使用 例出水
YEAR() 年を抽出 YEAR('2023-05-15') 2023
MONTH() 月を抽出 MONTH('2023-05-15') 5
DAY() 日を抽出 DAY('2023-05-15') 15
HOUR() 時を抽出 HOUR('14:30:00') 14
MINUTE() 分を抽出 MINUTE('14:30:00') 30
SECOND() 秒を抽出 SECOND('14:30:45') 45

これらを試してみましょう:

SELECT
YEAR('2023-05-15') AS year,
MONTH('2023-05-15') AS month,
DAY('2023-05-15') AS day,
HOUR('14:30:45') AS hour,
MINUTE('14:30:45') AS minute,
SECOND('14:30:45') AS second;

このクエリは、日付と時刻の各部分をきれいに抽出します。

実世界の応用

ユーザーのバースデーを表示するウェブサイトを構築しているとしましょう。MONTH()とDAY()関数を使えば、保存されたバースデーの月と日を抽出し、年を無視してユーザーにバースデーおめでとうを言うことができます。このようにして、ユーザーの年齢を明らかにすることなく、バースデーを祝福できます!

日付の算術:加算と減算

MySQLの日付関数の素晴らしいところの 하나は、日付に対して数学的な計算ができることです。以下にその関数を見てみましょう:

関数 説明 例使用
DATE_ADD() 日付にインターバルを加える DATE_ADD('2023-05-15', INTERVAL 1 DAY)
DATE_SUB() 日付からインターバルを引く DATE_SUB('2023-05-15', INTERVAL 1 MONTH)
DATEDIFF() 日付の差を求める DATEDIFF('2023-05-15', '2023-01-01')

以下のように使います:

SELECT
DATE_ADD('2023-05-15', INTERVAL 1 DAY) AS tomorrow,
DATE_SUB('2023-05-15', INTERVAL 1 MONTH) AS last_month,
DATEDIFF('2023-05-15', '2023-01-01') AS days_since_new_year;

このクエリは、明日の日付、先月の日付、新年以来の日数を表示します。

インターバルの力

DATE_ADD()とDATE_SUB()関数では、INTERVALキーワードを使用します。これは非常に柔軟で、年、月、日、時間、分、秒を加えたり引いたりできます!

日付と時刻のフォーマット

時折、特定の形式で日付と時刻を表示する必要があります。その際に便利なのがDATE_FORMAT()関数です:

SELECT DATE_FORMAT('2023-05-15 14:30:00', '%W, %M %d, %Y at %h:%i %p') AS formatted_date;

これは以下のように出力されます:「Monday, May 15, 2023 at 02:30 PM」

%記号に続く文字はフォーマット指定子です。以下に一般的なものを挙げます:

指定子 説明
%W 完全な曜日名
%M 完全な月名
%d 月の日(01-31)
%Y 4桁の年
%h 時(01-12)
%i 分(00-59)
%p AMまたはPM

すべてを合わせて

学んだことを実践的な例にまとめましょう。従業員の勤続年数を追跡するシステムを構築しているとしましょう:

CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
hire_date DATE
);

INSERT INTO employees VALUES
(1, 'Alice', '2020-06-15'),
(2, 'Bob', '2021-03-20'),
(3, 'Charlie', '2019-11-01');

SELECT
name,
hire_date,
YEAR(CURDATE()) - YEAR(hire_date) AS years_employed,
DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))),
INTERVAL IF(CURDATE() > DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))), 1, 0) YEAR)
AS next_anniversary,
DATEDIFF(
DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))),
INTERVAL IF(CURDATE() > DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))), 1, 0) YEAR),
CURDATE()
) AS days_until_anniversary
FROM employees;

このクエリは以下のことを行います:

  1. 各従業員の勤続年数を計算します。
  2. 彼らの次の勤続記念日を決定します。
  3. 次の記念日まであと何日かを計算します。

結論

おめでとうございます!MySQLの日付と時刻関数の世界への初めてのステップを踏み出しました。私たちは現在の日付と時刻の取得、日付の一部の抽出、日付の算術、そして日付のフォーマット化について学びました。

実践を重ねることで完璧になります。これらの関数を使ったクエリを自分で作成してみてください。もしかしたら、先ほど触れたバースデーお知らせアプリを構築するかもしれませんね!これらの関数を触るたびに、より慣れていくことでしょう。

そして、プログラミングの世界では、毎日が新しい学びの機会です。未来のデータベースの達人たち、ハッピーコーディング!

Credits: Image by storyset