■文字型でYYYY-MMの形式を日付型へ変換
■PostgreSQLの場合
SELECT section1, section2, to_date(month, 'YYYY-MM') as converted_month, SUM(amount) as total_amount FROM workexpenses WHERE (section1 = 'C' AND section2 IN ('Z', 'Y', 'X')) GROUP BY section1, section2, converted_month ORDER BY section1, section2, converted_month;
■MySQLの場合
STR_TO_DATE関数では、第2引数にフォーマット文字列を指定して、第1引数のテキストを日付型に変換します。上記の例では、'%Y-%m'というフォーマットを使用していますが、これは「2022-04」のような形式のテキストを日付型に変換するためのものです
SELECT section1, section2, STR_TO_DATE(month, '%Y-%m') as converted_month, SUM(amount) as total_amount FROM workexpenses WHERE (section1 = 'C' AND section2 IN ('Z', 'Y', 'X')) GROUP BY section1, section2, STR_TO_DATE(month, '%Y-%m') ORDER BY section1, section2, STR_TO_DATE(month, '%Y-%m');
【テストデータ作成用SQL】
-- テーブルの作成 CREATE TABLE WorkExpenses ( no INT PRIMARY KEY, section1 CHAR(1), section2 CHAR(1), month VARCHAR(10), -- この例ではテキスト型としていますが、日付型も考慮します amount DECIMAL(10, 2) ); -- テストデータの挿入 INSERT INTO WorkExpenses(no, section1, section2, month, amount) VALUES (1, 'C', 'Z', '2022-01', 100.50), (2, 'C', 'Y', '2022-01', 150.75), (3, 'C', 'X', '2022-01', 80.00), (4, 'C', 'Z', '2022-02', 110.00), (5, 'C', 'Y', '2022-02', 120.50), (6, 'C', 'X', '2022-02', 70.25), (7, 'C', 'Z', '2022-03', 105.50), (8, 'C', 'Y', '2022-03', 140.25), (9, 'C', 'X', '2022-03', 75.75), (10, 'C', 'Z', '2022-04', 115.00), (11, 'A', 'B', '2022-01', 50.50), -- これらは特定の作業コードの組み合わせ以外のデータです (12, 'A', 'B', '2022-02', 55.25), (13, 'A', 'B', '2022-03', 60.00), (14, 'A', 'B', '2022-04', 65.75);