【初心者向け】MariaDBのDATE関数:基本から応用まで分かりやすく解説


DATE関数

DATE関数は、文字列または日付/時刻値を引数として受け取り、YYYY-MM-DD形式の日付値を返します。

構文

DATE(expr)

引数

  • expr: 文字列または日付/時刻値

戻り値

  • YYYY-MM-DD形式の日付値


SELECT DATE('2024-07-14');
-- 結果: 2024-07-14

SELECT DATE(CURRENT_TIMESTAMP);
-- 結果: 2024-07-14

MariaDBには、DATE関数以外にも様々な便利な日付操作関数があります。以下に、代表的な関数をいくつか紹介します。

  • DATE_SUB関数
    指定された日付/時刻値から期間を減算します。
  • DATE_ADD関数
    指定された日付/時刻値に期間を加算します。
  • STR_TO_DATE関数
    文字列を日付/時刻値に変換します。
  • DATE_FORMAT関数
    日付/時刻値を指定された書式に変換します。
  • NOW()関数
    現在の日付と時刻をYYYY-MM-DD HH:MM:SS形式で返します。
  • CURRENT_DATE関数
    CURDATE関数と同じです。
  • CURDATE関数
    現在の日付をYYYY-MM-DD形式で返します。

DATE関数と組み合わせて使用できる関数

DATE関数は、他の関数と組み合わせて使用することで、より複雑な日付操作を実行することができます。以下に、いくつかの例を紹介します。

  • DATE_FORMAT関数と組み合わせて、日付を特定の書式に変換する
SELECT DATE_FORMAT(DATE('2024-07-14'), '%Y-%m-%d %H:%i:%S');
-- 結果: 2024-07-14 00:00:00
  • STR_TO_DATE関数と組み合わせて、文字列を日付に変換してからDATE関数で処理する
SELECT DATE(STR_TO_DATE('14 July 2024', '%d %M %Y'));
-- 結果: 2024-07-14
  • DATE_ADD関数と組み合わせて、特定の期間後の日付を取得する
SELECT DATE_ADD(DATE('2024-07-14'), INTERVAL 30 DAY);
-- 結果: 2024-08-13


様々な形式の日付文字列を処理する

以下の例では、様々な形式の日付文字列をDATE関数を使用してYYYY-MM-DD形式に変換する方法を示します。

SELECT DATE('2024-07-14') AS 'ISO format';
SELECT DATE('14/07/2024') AS 'DD/MM/YYYY format';
SELECT DATE('July 14, 2024') AS 'Month DD, YYYY format';

DATE_FORMAT関数を使用して日付をフォーマットする

以下の例では、DATE_FORMAT関数を使用して、DATE関数で取得した日付を様々な形式にフォーマットする方法を示します。

SELECT DATE('2024-07-14'),
       DATE_FORMAT(DATE('2024-07-14'), '%Y-%m-%d') AS 'ISO format',
       DATE_FORMAT(DATE('2024-07-14'), '%d/%m/%Y') AS 'DD/MM/YYYY format',
       DATE_FORMAT(DATE('2024-07-14'), '%b %d, %Y') AS 'Month DD, YYYY format';

STR_TO_DATE関数を使用して文字列を日付に変換してからDATE関数で処理する

以下の例では、STR_TO_DATE関数を使用して文字列を日付に変換してから、DATE関数を使用して曜日を取得する方法を示します。

SELECT DAYOFWEEK(STR_TO_DATE('14 July 2024', '%d %M %Y'));
-- 結果: 1 (日曜日)

DATE_ADD関数と組み合わせて特定の期間後の日付を取得する

以下の例では、DATE_ADD関数を使用して、現在の日付から30日後の日付を取得する方法を示します。

SELECT DATE_ADD(CURRENT_DATE, INTERVAL 30 DAY);

DATE関数と組み合わせて、誕生日を基に年齢を計算する

以下の例では、DATE関数と組み合わせて、誕生日を基に年齢を計算する方法を示します。

SELECT
  YEAR(CURRENT_DATE) - YEAR(birthdate) AS 'age',
  DATE_FORMAT(birthdate, '%Y-%m-%d') AS 'birthdate'
FROM customers;


文字列リテラル

最も簡単な代替方法は、文字列リテラルとして日付を直接指定する方法です。この方法は、比較的小規模なデータセットや、日付の書式が常に一定している場合に適しています。

SELECT * FROM customers WHERE birthdate = '2024-07-14';

CAST関数

文字列を日付に変換するには、CAST関数を使用することができます。この方法は、書式が一定でない日付文字列を処理する場合に役立ちます。

SELECT * FROM customers WHERE birthdate = CAST('14 July 2024' AS DATE);

STR_TO_DATE関数

より複雑な日付文字列の処理には、STR_TO_DATE関数を使用することができます。この関数は、書式化された文字列をDATE型に変換するだけでなく、様々な書式オプションを提供します。

SELECT * FROM customers
WHERE birthdate = STR_TO_DATE(birthdate_str, '%d %M %Y');

EXTRACT関数

日付情報の一部のみを抽出したい場合は、EXTRACT関数を使用することができます。この関数は、年、月、日、曜日など、特定の日付コンポーネントを抽出することができます。

SELECT
  YEAR(birthdate) AS 'year',
  MONTH(birthdate) AS 'month',
  DAY(birthdate) AS 'day'
FROM customers;

DATEDIFF関数

2つの日付間の差を計算するには、DATEDIFF関数を使用することができます。この関数は、日数、週数、月数、年数などの単位で差を返すことができます。

SELECT DATEDIFF(YEAR, '2020-01-01', CURRENT_DATE);
-- 結果: 4

NOW()関数

現在の日付と時刻を取得するには、NOW()関数を使用することができます。この関数は、様々な形式で現在の日付と時刻を返すことができます。

SELECT NOW();
-- 結果: 2024-07-14 00:00:00

CURDATE関数

現在の日付のみを取得するには、CURDATE関数を使用することができます。この関数は、YYYY-MM-DD形式で現在の日付を返します。

SELECT CURDATE();
-- 結果: 2024-07-14

上記以外にも、MariaDBには様々な日付操作関数があります。詳細は、MariaDB公式ドキュメントを参照してください。