MySQLの文字列関数と日付関数の実践ガイド

文字列処理関数の詳細

MySQLの文字列操作機能を活用した実用例を解説します。

CONCAT関数の応用

複数の文字列を結合する際の基本的な使用方法です。

SELECT CONCAT('開発', 'チーム', 'A') AS team_name;
-- 結果: '開発チームA'

文字列の大小変換

英語文字列のケース変換処理を示します。

SELECT UPPER('mysql') AS upper_result;
-- 結果: 'MYSQL'
SELECT LOWER('SQL') AS lower_result;
-- 結果: 'sql'

文字列長の計測

UTF-8環境におけるバイト数計測の注意点を含みます。

SELECT LENGTH('データベース') AS byte_length;
-- 結果: 12(各文字3バイト)

部分文字列の抽出

指定位置からの文字列切り出し例です。

SELECT SUBSTRING('MySQL機能解説', 4, 5) AS extracted;
-- 結果: '機能解説'

文字列置換処理

特定文字列の置換を実施する例です。

SELECT REPLACE('プロジェクトA', 'A', 'B') AS updated_name;
-- 結果: 'プロジェクトB'

余白除去処理

前後のスペースを除去する実用例です。

SELECT TRIM('  サンプルデータ  ') AS cleaned_data;
-- 結果: 'サンプルデータ'

日付操作関数の実装例

現在日時取得

システム日付と時刻を取得する基本構文です。

SELECT CURDATE() AS today_date;
-- 例: '2024-03-15'
SELECT NOW() AS current_timestamp;
-- 例: '2024-03-15 14:25:30'

日付差分計算

2つの日付間の日数差を算出する例です。

SELECT DATEDIFF('2024-03-31', '2024-03-01') AS days_diff;
-- 結果: 30

日付要素の分解

年月日要素の個別抽出方法です。

SELECT YEAR('2024-05-20') AS year_part;
-- 結果: 2024
SELECT MONTH('2024-05-20') AS month_part;
-- 結果: 5
SELECT DAY('2024-05-20') AS day_part;
-- 結果: 20

日付演算処理

日付への加算・減算操作例です。

SELECT DATE_ADD('2024-01-01', INTERVAL 2 QUARTER) AS new_date;
-- 結果: '2024-07-01'
SELECT DATE_SUB('2024-01-01', INTERVAL 10 DAY) AS past_date;
-- 結果: '2023-12-22'

従業員管理システムの実装例

テーブル構造とサンプルデータ

CREATE TABLE staff_records (
    staff_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    salary DECIMAL(10, 2),
    join_date DATE,
    section VARCHAR(50)
);

INSERT INTO staff_records (name, salary, join_date, section) VALUES
('山田太郎', 60000.00, '2020-01-15', '開発'),
('佐藤花子', 75000.00, '2019-03-22', '営業'),
('鈴木一郎', 50000.00, '2021-06-30', '人事'),
('高橋美咲', 80000.00, '2018-11-11', '財務'),
('伊藤健太', 90000.00, '2022-02-01', '開発'),
('渡辺直美', 65000.00, '2020-05-20', '営業');

基本クエリの実行

SELECT name, salary FROM staff_records;
SELECT name FROM staff_records WHERE salary > 70000;

文字列処理の応用

SELECT name, LENGTH(name) AS name_size FROM staff_records;
SELECT REPLACE(name, '田', '木') AS modified_name FROM staff_records;

日付処理の実践

SELECT name, YEAR(join_date) AS join_year FROM staff_records;
SELECT name, DATEDIFF(CURDATE(), join_date) AS days_worked FROM staff_records;
SELECT name FROM staff_records 
WHERE DATEDIFF(CURDATE(), join_date) > 1095;

集計処理の実装

SELECT section, AVG(salary) AS avg_salary 
FROM staff_records 
GROUP BY section;

SELECT YEAR(join_date) AS year, COUNT(*) AS staff_count 
FROM staff_records 
GROUP BY year;

実装上の注意点

  • 文字列関数の特性
    • TRIMは先頭・末尾の空白のみを除去し、内部の空白は保持されます
    • 日本語文字列のケース変換は対象外となります
  • 日付処理のポイント
    • DATEDIFFは時刻情報を無視して日付部分のみを比較します
    • DATE_ADD/DATE_SUBのINTERVAL単位にはYEAR/MONTH/DAY/HOURが使用可能
  • パフォーマンス最適化
    • WHERE句でのフィールド関数使用はインデックス非適用の原因となるため、範囲指定クエリを推奨します
    • 頻繁に使用される日付計算用フィールドには専用インデックスを追加してください

タグ: MySQL string-functions date-functions sql-optimization database-management

6月24日 19:07 投稿