SQL Reference

全エンジニア必携!SQL関数 逆引き図鑑

🔤 文字列操作 (String)

やりたいこと MySQL PostgreSQL Oracle SQL Server BigQuery
結合 CONCAT(a, b) a || b a || b a + b CONCAT(a, b)
切り出し SUBSTRING(s,1,3) SUBSTR(s,1,3) SUBSTR(s,1,3) SUBSTRING(s,1,3) SUBSTR(s,1,3)
長さ (文字数) CHAR_LENGTH(s) LENGTH(s) LENGTH(s) LEN(s) LENGTH(s)
検索 (位置) LOCATE('a', s) POSITION('a' in s) INSTR(s, 'a') CHARINDEX('a', s) STRPOS(s, 'a')

📅 日付・時刻 (Date & Time)

やりたいこと MySQL PostgreSQL Oracle SQL Server BigQuery
現在日時 NOW() NOW() SYSDATE GETDATE() CURRENT_DATETIME()
昨日 DATE_SUB(NOW(), INTERVAL 1 DAY) NOW() - INTERVAL '1 day' SYSDATE - 1 DATEADD(day, -1, GETDATE()) DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
差分 (日数) DATEDIFF(end, start) end - start end - start DATEDIFF(day, start, end) DATE_DIFF(end, start, DAY)

🎨 日付フォーマット変換 (YYYY-MM-DDなど)

※日付型を文字列に変換する場合

書式 MySQL PostgreSQL Oracle SQL Server BigQuery
YYYY-MM-DD DATE_FORMAT(col, '%Y-%m-%d') TO_CHAR(col, 'YYYY-MM-DD') TO_CHAR(col, 'YYYY-MM-DD') FORMAT(col, 'yyyy-MM-dd') FORMAT_DATE('%Y-%m-%d', col)
YYYY年MM月 DATE_FORMAT(col, '%Y年%m月') TO_CHAR(col, 'YYYY年MM月') TO_CHAR(col, 'YYYY"年"MM"月"') FORMAT(col, 'yyyy年MM月') FORMAT_DATE('%Y年%m月', col)

🚫 NULL処理

やりたいこと MySQL PostgreSQL Oracle SQL Server BigQuery
NULLなら0 IFNULL(col, 0)
or COALESCE
COALESCE(col, 0) NVL(col, 0) ISNULL(col, 0)
or COALESCE
IFNULL(col, 0)

🔄 型変換 (Cast)

やりたいこと MySQL PostgreSQL Oracle SQL Server BigQuery
文字 → 数値 CAST(s AS UNSIGNED) s::integer
or CAST
TO_NUMBER(s) CAST(s AS INT) CAST(s AS INT64)
文字 → 日付 CAST(s AS DATE) s::date
or TO_DATE
TO_DATE(s, 'fmt') CAST(s AS DATE) PARSE_DATE('%Y-%m-%d', s)

📦 JSONデータの操作 (値の抽出)

※カラム data の中のキー "name" を取り出す場合

DB 書き方 備考
MySQL data->'$.name' バージョン5.7以降で対応
PostgreSQL data->>'name' ->> はテキストとして取得
BigQuery JSON_EXTRACT_SCALAR(data, '$.name') または data.name (JSON型の場合)
SQL Server JSON_VALUE(data, '$.name') 2016以降で対応
Oracle JSON_VALUE(data, '$.name') 12c以降で対応

📊 ウィンドウ関数 (ランキング等)

関数 説明 結果例 (100, 90, 90, 80点の場合)
ROW_NUMBER() 重複があっても連番を振る 1, 2, 3, 4
RANK() 重複は同順位、次は飛ばす 1, 2, 2, 4
DENSE_RANK() 重複は同順位、次は詰める 1, 2, 2, 3

基本構文:
RANK() OVER (PARTITION BY カテゴリ ORDER BY 点数 DESC)
※ほぼ全てのDBで共通の構文で使用できます。

🔗 文字列集計 (複数行を1つに結合)

GROUP BY とセットで使い、"A, B, C" のようにまとめる機能

やりたいこと MySQL PostgreSQL Oracle SQL Server BigQuery
カンマ区切りで結合 GROUP_CONCAT(col) STRING_AGG(col, ',') LISTAGG(col, ',')
WITHIN GROUP...
STRING_AGG(col, ',')
(2017以降)
STRING_AGG(col, ',')
ソートして結合 GROUP_CONCAT(col ORDER BY col) STRING_AGG(col, ',' ORDER BY col) LISTAGG(...)
WITHIN GROUP (ORDER BY col)
STRING_AGG(...)
WITHIN GROUP (ORDER BY col)
STRING_AGG(col, ',' ORDER BY col)

🧩 正規表現 (Regular Expression)

やりたいこと MySQL PostgreSQL Oracle SQL Server BigQuery
マッチするか判定 col REGEXP 'pattern' col ~ 'pattern' REGEXP_LIKE(col, 'pattern') (標準非対応) REGEXP_CONTAINS(col, 'pattern')
部分抽出 REGEXP_SUBSTR SUBSTRING(col FROM 'pattern') REGEXP_SUBSTR - REGEXP_EXTRACT
置換 REGEXP_REPLACE REGEXP_REPLACE REGEXP_REPLACE - REGEXP_REPLACE

🧮 数値・数学 (Math)

やりたいこと MySQL PostgreSQL Oracle SQL Server BigQuery
四捨五入 ROUND(col, 桁) ROUND(col, 桁) ROUND(col, 桁) ROUND(col, 桁) ROUND(col, 桁)
切り捨て TRUNCATE(col, 桁) TRUNC(col, 桁) TRUNC(col, 桁) ROUND(col, 桁, 1) TRUNC(col, 桁)
ランダム値 RAND() RANDOM() DBMS_RANDOM.VALUE RAND() RAND()
余り (Mod) MOD(a, b) MOD(a, b) MOD(a, b) a % b MOD(a, b)

🛠 システム情報・メタデータ

やりたいこと MySQL PostgreSQL Oracle SQL Server BigQuery
テーブル一覧 SHOW TABLES \dt (psql)
or SELECT * FROM pg_tables
SELECT * FROM user_tables SELECT * FROM sys.tables (コンソールで確認)
カラム情報 DESC table_name \d table DESC table_name sp_help table (スキーマタブ)
実行件数制限 LIMIT 10 LIMIT 10 FETCH FIRST 10 ROWS ONLY TOP 10 * LIMIT 10

SerchCode Pro の全機能