1. はじめに:業務でよく出る「日付・数値変換の罠」
Oracleでは、日付や数値を扱うときに
- 「文字列を日付に変換できない」
- 「日付の比較がうまくいかない」
- 「小数点の丸めが想定と違う」
といったトラブルが頻発します。
本記事では、よく使う基本構文と実務で役立つ応用例を、実際のSQLサンプル付きで整理します。

2. 日付操作の基本:SYSDATEとADD_MONTHS
■ 現在日付を取得
1 2 |
SELECT SYSDATE FROM DUAL; |
例)結果:2025-10-14 23:10:12
■ 日付の加算・減算
1 2 3 4 |
SELECT SYSDATE + 7 AS NEXT_WEEK, SYSDATE - 1 AS YESTERDAY FROM DUAL; |
👉 Oracleでは 日付に数値を加える=日数の加算
(+1
→ 翌日、-1
→ 前日)
■ 月単位での加算(ADD_MONTHS)
1 2 |
SELECT ADD_MONTHS(SYSDATE, 3) AS THREE_MONTHS_LATER FROM DUAL; |
👉 日付を基準に3か月後を取得できます。
3. 月末・月初を求める方法
■ 月末を取得(LAST_DAY)
1 2 |
SELECT LAST_DAY(SYSDATE) AS MONTH_END FROM DUAL; |
👉 結果例:2025-10-31
■ 月初を取得(TRUNC)
1 2 |
SELECT TRUNC(SYSDATE, 'MM') AS MONTH_START FROM DUAL; |
👉 結果例:2025-10-01
4. 文字列⇔日付変換(TO_DATE/TO_CHAR)
■ 文字列を日付に変換(TO_DATE)
1 2 |
SELECT TO_DATE('2025/10/01', 'YYYY/MM/DD') FROM DUAL; |
👉 日付フォーマットは区切り文字も完全一致させるのがポイント。
■ 日付を文字列に変換(TO_CHAR)
1 2 |
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') FROM DUAL; |
👉 実務ではログ出力やメール通知でよく使用。
■ 日付フォーマット早見表
パターン | 意味 | 例 |
---|---|---|
YYYY | 西暦4桁 | 2025 |
MM | 月(2桁) | 10 |
DD | 日(2桁) | 14 |
HH24 | 時(24時間表記) | 23 |
MI | 分 | 59 |
SS | 秒 | 12 |
5. 日付の差分を求める(業務レポート系で多用)
1 2 |
SELECT ROUND(SYSDATE - TO_DATE('2025-09-30', 'YYYY-MM-DD')) AS DIFF_DAYS FROM DUAL; |
👉 結果:14
(14日差)
Oracleでは日付同士の差=日数になります。
時間単位まで出したい場合は *24
や *24*60
を掛けます。
6. 数値操作の基本(ROUND/TRUNC)
■ 四捨五入(ROUND)
1 2 |
SELECT ROUND(123.456, 2) FROM DUAL; |
👉 結果:123.46
■ 切り捨て(TRUNC)
1 2 |
SELECT TRUNC(123.456, 2) FROM DUAL; |
👉 結果:123.45
■ 整数部のみ取得
1 2 |
SELECT TRUNC(123.456) FROM DUAL; |
👉 結果:123
7. 日付・数値操作の組み合わせ応用例
■ 支払期日を算出(請求日+30日)
1 2 |
SELECT TO_CHAR(TO_DATE('2025-10-01', 'YYYY-MM-DD') + 30, 'YYYY/MM/DD') AS DUE_DATE FROM DUAL; |
👉 結果:2025/10/31
■ 売上レポートの「当月末日」計算
1 2 3 4 5 |
SELECT LAST_DAY(TO_DATE('2025-10-01', 'YYYY-MM-DD')) AS PERIOD_END, TRUNC(SYSDATE, 'MM') AS PERIOD_START FROM DUAL; |
■ 小数点付き金額の処理(税計算)
1 2 |
SELECT ROUND(12345.678 * 1.1, 0) AS TAX_INCLUDED FROM DUAL; |
👉 結果:13580
※ROUND(..., 0)
で整数丸め。
8. よくあるエラーと対策
エラー内容 | 原因 | 対策 |
---|---|---|
ORA-01861: 文字がフォーマット文字列と一致しません | 'YYYY/MM/DD' に対して 'YYYY-MM-DD' 形式を渡している | 区切り文字も一致させる |
ORA-00932: データ型が一致しません | 日付列と文字列を直接比較 | TO_DATEで明示的に変換 |
結果が1日ズレる | タイムゾーン or 時刻部分を保持 | TRUNCで時刻切り捨て |
9. まとめ:Oracleの日付・数値操作は業務効率化の要
カテゴリ | 関数 | よく使う用途 |
---|---|---|
日付操作 | SYSDATE/ADD_MONTHS | 現在日付・期間加算 |
フォーマット | TO_DATE/TO_CHAR | 文字列⇔日付変換 |
月初・月末 | TRUNC/LAST_DAY | 集計期間処理 |
数値処理 | ROUND/TRUNC | 金額計算・レポート丸め |
実務では、**「フォーマット整形」と「端数処理」**が最も多く、
ここを正確に扱えるかどうかが、システム品質に直結します。

コメント