文字列処理関数の詳細
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句でのフィールド関数使用はインデックス非適用の原因となるため、範囲指定クエリを推奨します
- 頻繁に使用される日付計算用フィールドには専用インデックスを追加してください