0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Database SQL (1Z0-071-JPN)試験 数値・文字列・日付をSELECTで扱う【第2章_中編】

0
Last updated at Posted at 2026-03-28

この記事について

この記事では、それぞれのデータを SELECT文でどう扱うか に焦点を当てます。

  • 数値データと算術演算子
  • 文字列と連結演算子
  • 日時データと書式モデル

数値データと算術演算子

数値リテラルとは

SQLの中に直接書いた数値そのもののことを 数値リテラル と言います。クォートで囲む必要はなく、そのまま記述できます。

SELECT 100      FROM DUAL; -- 数値リテラル
SELECT 1.5 * 2  FROM DUAL; -- 算術式
動作確認 ①数値リテラル

image.png

②算術式
image.png

算術演算子の種類と優先順位

SELECT句やWHERE句の中で算術演算子を使えます。

演算子 意味 優先順位
* 乗算 高い(先に計算)
/ 除算 高い(先に計算)
+ 加算 低い
- 減算 低い

優先順位のルール

  1. *(乗算)・/(除算)が先に計算される
  2. 同じ優先順位の演算子は、左から右の順に計算される
  3. ()(括弧)で囲むと、優先順位を変更できる
-- 優先順位の違いを確認する例
SELECT 2 + 3 * 4    FROM DUAL; -- 結果: 14(3*4=12が先)
SELECT (2 + 3) * 4  FROM DUAL; -- 結果: 20(括弧内が先)
動作確認 ①カッコ無

image.png

②カッコ有
image.png

SELECTリストでの算術式

列値に対して算術式を適用し、計算結果を取得できます。

-- 月給を年収に変換して表示
SELECT employee_id,
       last_name,
       salary,
       salary * 12 AS annual_salary
FROM   employees;
動作確認 テストデータ作成

image.png

image.png

列値に対して、算術式で計算できることを確認
image.png

WHERE句での算術式

WHERE句でも算術式や数値リテラルを使って条件を指定できます。

-- 年収(月給×12)が600万以上の社員
SELECT last_name, salary
FROM   employees
WHERE  salary * 12 >= 6000000;
動作確認 WHERE句でも算術式や数値リテラルを指定できることを確認

image.png


算術式を使用できる句まとめ(試験頻出)

算術式(列名や数値リテラルを演算子で組み合わせた式)は、Oracle SQL の複数の句で使用できます。

句 使用可否 使用例
SELECT リスト ✅ 可 salary * 12 AS annual_salary
WHERE 句 ✅ 可 WHERE salary * 12 >= 6000000
ORDER BY 句 ✅ 可 ORDER BY salary * 12 DESC
GROUP BY 句 ✅ 可 GROUP BY salary * 12
HAVING 句 ✅ 可 HAVING SUM(salary * 12) > 60000000
UPDATE の SET 句 ✅ 可 SET salary = salary * 1.1
INSERT の VALUES 句 ✅ 可 VALUES (salary_seq.NEXTVAL, 300000 * 12)
CHECK 制約の条件式 ✅ 可 CHECK (max_salary >= min_salary * 2)
JOIN の ON 句 ✅ 可(等値・非等値とも) ON e.salary BETWEEN j.min_salary AND j.max_salary

🔑 試験ポイント

  • ORDER BY 句では SELECT リストの列別名または列位置番号を使うことが多いが、算術式を直接記述することも可能
  • GROUP BY 句に算術式を書く場合は、SELECT リストにも同じ式を書く必要がある(列別名は使用不可)
  • HAVING 句は GROUP BY の結果に対して条件を絞り込む句であり、集計関数との組み合わせで算術式を使うことが多い
  • FROM 句は 算術式を使用できない


文字列と連結演算子

文字リテラルとは

SQLの中に直接書いた文字列のことを 文字リテラル と言います。一重引用符 '(シングルクォーテーション) で囲んで指定します。二重引用符ではありません。

SELECT 'Hello, Oracle!' FROM DUAL;
SELECT '東京'           FROM DUAL;
動作確認 英語

image.png

日本語
image.png

🔑 試験ポイント:文字リテラルは ' で囲む。列別名で使う " とは区別しましょう。

連結演算子「||」

|| を使うことで、複数の文字列を1つにつなげられます。連結できる対象は次のとおりです。

  • 文字データ型の列
  • 文字リテラル
-- 姓名を「姓 名」の形式で表示
SELECT last_name || ' ' || first_name AS full_name
FROM   employees;

-- 固定文字を組み合わせる例
SELECT employee_id || 'さんの部署は' || department_id AS info
FROM   employees;
動作確認 姓名を「姓 名」の形式で表示

image.png

固定文字を組み合わせる例
image.png

一重引用符 ' を文字として表示する方法

文字リテラルの中で '(一重引用符)そのものを表示したい場合、以下の2つの方法があります。

① 一重引用符を2つ続けて書く

-- 「It's Oracle」と表示したい
SELECT 'It''s Oracle' FROM DUAL;
-- 結果: It's Oracle
動作確認 一重引用符を2つ続けて書く

image.png

② 代替引用符(q)演算子を使う

q' に続けて、任意の区切り文字でテキストを囲む方法です。

SELECT q'[It's Oracle]'  FROM DUAL; -- [ ] で囲む
SELECT q'{It's Oracle}'  FROM DUAL; -- { } で囲む
SELECT q'(It's Oracle)'  FROM DUAL; -- ( ) で囲む
SELECT q'<It's Oracle>'  FROM DUAL; -- < > で囲む
SELECT q'#It's Oracle#'  FROM DUAL; -- 任意の同じ文字で囲む
動作確認 代替引用符(q)演算子を使う

image.png

🔑 書き方のルール:q' のあとに区切り文字を指定し、最後を ' で閉じます。[・{・(・< を使う場合は、対応する閉じ括弧 ]・}・)・> で終わります。同じ文字を開始と終了に使うことも可能です。
大文字の英字と小文字の英字は区別されるので、大文字か小文字どちらかに統一する必要があります。


日時データと書式モデル

日時リテラルとは

数値や文字列と異なり、日時には専用のリテラルがあります。

リテラル 書式例 特徴
日付リテラル DATE '2026-03-28' 日付のみ(時刻は 00:00:00 固定)
TIMESTAMPリテラル TIMESTAMP '2026-03-28 12:00:00' 日付と時刻を指定可能
-- 日付リテラルの使用例
SELECT * FROM employees WHERE hire_date >= DATE '2020-01-01';

-- TIMESTAMPリテラルの使用例
SELECT TIMESTAMP '2026-03-28 12:00:00' FROM DUAL;
動作確認 日付リテラルの使用例

image.png

TIMESTAMPリテラルの使用例
image.png

🔑 試験ポイント:日付リテラルは DATE '...' の形式で使います。文字列の日付('2026-03-28')と日付リテラル(DATE '2026-03-28')は異なります。


文字列を日時データに変換する方法

文字列を日時データとして扱う方法は4つあります。

方法 内容
① TO_DATE(書式を明示) TO_DATE('2026-03-28', 'YYYY-MM-DD') のように書式を指定して明示的に変換
② TO_DATE(書式を省略) 書式を省略すると NLS_DATE_FORMAT の設定に基づいて変換
③ 暗黙的な変換 NLS_DATE_FORMAT に合った文字列は自動的に日時データとして解釈される
④ 日付リテラル DATE '2026-03-28' の形式で指定。時刻は 00:00:00 になる
-- ① TO_DATEで書式を明示
SELECT TO_DATE('2026-03-28 12:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

-- ② 書式省略(NLS_DATE_FORMATに依存)
SELECT TO_DATE('2026-03-28 12:00:00') FROM DUAL; 

-- ④ 日付リテラル
SELECT * FROM employees WHERE hire_date = DATE '2020-04-01';
動作確認 ① TO_DATEで書式を明示

image.png

② 書式省略(NLS_DATE_FORMATに依存)
image.png

④ 日付リテラル
image.png

🔑 試験ポイント:暗黙的な変換(③)はNLS設定に依存するため予期しない動作を招くことがあります。実務・試験ともに TO_DATE で書式を明示する方法(①)を基本とします。


日時の書式モデル

書式モデルは、日時データを「どのように表示するか」または「文字列をどのように日時として解釈するか」を定義する文字列です。

主な書式要素一覧

要素 意味 例
YYYY 4桁の西暦年 2026
YY 年の下2桁(現在の世紀に解釈) 26
RR 年の下2桁(世紀をスマートに判定) 26
MM 月(01〜12) 03
MONTH 月の名前 MARCH
MON 月の省略名 MAR
DD 日(01〜31) 28
D 曜日番号(1=日曜〜7=土曜) 7
DAY 曜日名 SATURDAY
DY 曜日省略名 SAT
HH24 時(24時間表記) 14
HH 時(12時間表記) 02
MI 分 30
SS 秒 00
FF 秒の小数部(TIMESTAMP用) 123456
AM / PM 午前・午後の表示 PM
TZR タイムゾーン領域 Asia/Tokyo

YYとRRの違い

現在の年(下2桁) 指定値 YY での解釈 RR での解釈
00〜49 50〜99 現在の世紀(2050〜2099) 前の世紀(1950〜1999)
00〜49 00〜49 現在の世紀(2000〜2049) 現在の世紀(2000〜2049)

🔑 試験ポイント:RR は「過去の日付を現代に入力する」ための書式です。TO_DATE('95-01-01', 'RR-MM-DD') は1995年と解釈されますが、TO_DATE('95-01-01', 'YY-MM-DD') は2095年と解釈されます。Oracleは YYYY の使用を推奨しています。


代表的な日時書式の例

書式モデル 表示例 主な用途
YYYY/MM/DD HH24:MI:SS 2026/03/28 12:00:00 日本語環境でよく使われる
RR-MM-DD 26-03-28 日本語環境のデフォルト(時刻なし)
DD-MON-YYYY HH24:MI:SS 28-MAR-2026 12:00:00 英語環境でよく使われる
DD-MON-RR 28-MAR-26 英語環境のデフォルト(時刻なし)

NLS_DATE_FORMAT パラメータ

NLS_DATE_FORMAT は、日時データの表示形式と文字列から日時への変換書式を決める初期化パラメータです。

項目 内容
役割① 日時データを表示するときの形式
役割② 文字列を日時データに変換するときの書式(TO_DATEで書式省略時)
デフォルト値 NLS_TERRITORY の地域設定により異なる
AMERICA の場合 DD-MON-RR(例:28-MAR-26)
JAPAN の場合 RR-MM-DD(例:26-03-28)

🔑 注意点:デフォルト値は日付のみを表示し、時刻は表示されません。時刻まで表示するには TO_CHAR で書式を明示的に指定する必要があります。


日付型まとめ(DATE vs TIMESTAMP)

項目 DATE TIMESTAMP
格納内容 年月日・時分秒(整数秒まで) 年月日・時分秒・小数秒
書式パラメータ NLS_DATE_FORMAT NLS_TIMESTAMP_FORMAT
変換ファンクション TO_DATE TO_TIMESTAMP
リテラル DATE '2026-03-28' TIMESTAMP '2026-03-28 12:00:00'
小数秒の格納 ❌ 不可 ✅ 可能(FF 要素で指定)

本章のまとめ

テーマ 試験で押さえるポイント
算術演算子の優先順位 *・/ が先。括弧で変更できる
文字リテラル ' で囲む(二重引用符ではない)
連結演算子 || で文字列をつなぐ
' の表示方法 '' と2つ続けるか、q'[...]' の代替引用符を使う
日付リテラル DATE '2026-03-28'。時刻は 00:00:00 固定
TO_DATE の使い方 書式を明示するのが推奨。省略時は NLS_DATE_FORMAT に依存
YY と RR の違い YY は現在の世紀。RR は入力値に応じて世紀を判定
NLS_DATE_FORMAT 日本環境は RR-MM-DD、英語環境は DD-MON-RR がデフォルト
DATE vs TIMESTAMP 小数秒を格納できるのは TIMESTAMP のみ

次回

次の記事では以下を扱います。

  • NULLの扱い
  • DISTINCTによる重複データの除外

「値がない」状態の扱い方は、算術演算・比較・関数に広く影響するため、試験でも頻出のテーマです。


参考

  1. SELECT句の算術式の指定の方法とは? | OWLVIEW

  2. 演算子の優先順位のルール

  3. 連結演算子、代替引用符演算子の使用 – | oraclemaster - Oracle Blogs

  4. オラクル代替引用符について #SQL - Qiita

  5. [ Oracle ] q 演算子 シングルクォーテーションを文字として扱う

  6. SQLの文法まとめ - プログラミング学習サイト

  7. 文字列を日時データに変換する方法 | オラクルマスターを取得 ...

  8. 日時・日付・期間 リテラル - オラクル・Oracleをマスターするため ...

  9. Oracle SQLチューニング(第34回)「日データ関連関数紹介」(3/3)

  10. SQL言語リファレンス

  11. 書式モデル(日付) - オラクル・Oracleをマスターするための基本と ...

  12. 7 書式モデル

  13. 書式モデル

  14. RR日付書式について: オラクルマスター(ORACLE MASTER)過去 ...

  15. Oracleの日付書式"RR"と"YY"は4桁表記にも適用できる - ぱと隊長日誌

  16. 助けてください(汗)オラクルの日付表記について、「2020年...

  17. Oracleのto_date関数の使用が無効です。どうやって解決できる ...

  18. データ定義言語(DDL)の概要 (1/4) - HRzine

  19. 日付の取り扱い(全7問) - Zenn

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?