SQL関数と演算子
エクセルVBAでデータベースを扱うためのSQL入門です。
前2回でSELECTをやりましたが、その中で登場したCOUNTやSUMはSQL関数です。
今回は、SQL関数と演算子について、代表的なものについて使い方を解説します。
SQLにはSQL関数が多数あります。
いずれの場合でも、関数を使わないとできることが限られてしまいます。
関数の理解度ができることの範囲を決めると言っても良いでしょう。
特にSQL関数は、数も多くDBによる違いがとても多くなっていますので、
ここでは、使用頻度の高そうなものの中から、なるべく広く使えるものを中心に取り上げました。
それでも、他のDBでは使えないものも出てきますので、SQLite以外では使用するDBごとに確認してください。
集計/数値関数
| 関数名 | 構文 | 説明 |
| COUNT | COUNT(式) | グループした時のグループ内の行数を返します。 式に*(アスタリスク)を指定した場合はテーブルの行数を返します。 式にカラム名を指定した場合は、NULL以外のセルの個数を返します。 |
| SUM | SUM(数値式) | グループした時のグループ内の合計を返します。 NULLは無視されます。 |
| AVG | AVG(数値式) | グループした時のグループ内の平均を返します。 NULLは無視されます。 |
| MAX | MAX(数値式) | グループした時のグループ内の最大値を返します。 NULLは無視されます。 |
| MIN | MIN(数値式) | グループした時のグループ内の最小値を返します。 NULLは無視されます。 |
| ABS | ABS(数値式) | 絶対値を返します。 |
| ROUND | ROUND(数値式, 小数点桁数) | 小数点の位置で四捨五入して返します。 0なら整数で、2なら小数単以下2桁で返します。 ※DBによっては四捨五入ではなく偶数丸め(銀行丸め)になります。 |
文字列関数
| 関数名 | 構文 | 説明 |
| LENGTH | LENGTH(文字列式) | 文字列の文字数を返します。 バイト数ではなく、文字数です、漢字も1文字となります。 ※DBによってはバイト数を返します。 |
| REPLACE | REPLACE(文字列式, 置換前, 置換後) | 文字列の置換前を置換後に置き換えて返します。 大文字・小文字は区別されます。 |
| SUBSTR | SUBSTR(文字列式, 開始位置, 文字数) | 文字列の開始位置から文字数分の文字列を返します。 文字数を省略した場合は文字列の最後までが対象となります。 ※DBによっては関数名がSUBSTRINGになります。 ※DBによっては文字数ではなくバイト数指定になります。 |
| TRIM | TRIM(文字列式, 削除文字) | 文字列から削除文字を削除した文字列を返します。 削除文字を省略した場合はスペース(半角全角)になります。 |
| LTRIM | LTRIM(文字列式, 削除文字) | 文字列の左から連続する削除文字を削除した文字列を返します。 削除文字を省略した場合はスペース(半角全角)になります。 |
| RTRIM | RTRIM(文字列式, 削除文字) | 文字列の右から連続する削除文字を削除した文字列を返します。 削除文字を省略した場合はスペース(半角全角)になります。 |
日付時刻関数
このSQL入門では、日付時刻に関しては、関数はなるべく使わずに文字列として扱う予定です。
以下は、SQLite独自の関数または挙動になります。
| 関数名 | 構文 | 説明 | ||||||||||||||||||||||||||
| DATE | DATE(日付時刻) | 日付時刻(文字列式)から'YYYY-MM-DD'で返します。 | ||||||||||||||||||||||||||
| TIME | TIME(日付時刻) | 日付時刻(文字列式)から'HH:MM:SS'で返します。 | ||||||||||||||||||||||||||
| DATETIME | DATETIME(日付時刻) | 日付時刻(文字列式)から'YYYY-MM-DD HH:MM:SS'で返します。 | ||||||||||||||||||||||||||
| STRFTIME | STRFTIME(フォーマット,日付時刻) | 日付時刻(文字列式)から指定フォーマットで返します。
|
||||||||||||||||||||||||||
| CURRENT_TIMESTAMP | CURRENT_TIMESTAMP | 現在日時をUTCで返します。 | ||||||||||||||||||||||||||
| CURRENT_TIME | CURRENT_TIME | 現在時刻をUTCで返します。 | ||||||||||||||||||||||||||
| CURRENT_DATE | CURRENT_DATE | 現在日付をUTCで返します。 |
SQLiteでは、日付時刻に'now'を定数指定することで現在日時を取得できます。
日本時間および現地時間にするには、以下のようにしてください。
DATETIME(CURRENT_TIMESTAMP,'+9 hours')
STRFTIME('%Y-%m-%d %H:%M','now','localtime')
DATE関数、TIME関数、DATETIME関数、STRFTIME関数には、
最後の引数の後ろに追加の引数としてModifiers(修飾子)が指定できます。
| N years | 年月日時分秒を加減算します。 Nは±符号を付けた数値 |
| N months | |
| Ndays | |
| N hours | |
| N minutes | |
| N seconds | |
| start of year | 日付の年の最初の日 |
| start of month | 日付の月の最初の日 |
| start of day | 日付の午前0時 |
| weekday N | 指定した日付の、Nで指定した曜日の最初の日 Nは、0日曜日~6土曜日 |
| unixepoch | 日付の指定を'DDDDDDDDDD'の形式で指定した時、UNIXタイムスタンプの値として処理 |
| localtime | ローカルのタイムゾーンでの日付と時刻に変換 |
| utc | 日付のタイムゾーンをローカルタイムゾーンとして扱いUTCタイムゾーンに変換 |
localtime以外は使う事がないと思いますが、WEBに情報が少ないのであえて記載しておきました。
上記は、以下のページを参考にまとめました。
Modifiers(修飾子)の指定
その他の関数
| 関数名 | 構文 | 説明 |
| IFNULL | IFNULL(式, 値) | 式の値がNULLの場合は第2引数の値を返します。 |
※NULLについては、次回詳しく解説します。
演算子
比較演算子
| = | 等しい |
| > | 大きい |
| < | 小さい |
| >= | 以上 |
| <= | 以下 |
| <> | 等しくない |
| != | 等しくない |
論理演算子
| AND | 右辺と左辺がともに真の時に真 | ||||
| OR | 右辺と左辺のどちらかが真の時に真 | ||||
| BETWEEN | 式 BETWEEN 値1 AND 値2 式の値が、値1以上値2以下の時に真 |
||||
| IN | 式 IN (式, ・・・) INの前の式が、()内のいずれかと一致している場合に真 |
||||
| LIKE | メタ文字によるパターンマッチングを行います
|
ビット演算子
| & | 論理積 |
| | | 論理和 |
算術演算子
| + | 足し算 |
| - | 引き算 |
| * | 掛け算 |
| / | 割り算 |
| % | 剰余 |
文字列結合
||
右辺と左辺の文字列式を結合した文字列を返します。
文字列式1 || 文字列式2 → 文字列1文字列2
多くのDBにはCONCAT関数があります。
SQLiteにはCONAT関数が無いので、||で文字列結合してください。
IS NULL演算子
否定の場合は、
IS NOT NULL
とします。
これではNULL判定できません。
CASE演算子
判定は左から順に行われ、最初に一致したWHENに対応するTHENの式が返されます。
一致するWHENが無いときはELSEの式が返され、ELSEが省略されている場合はNULLが返されます。
CASE item_count WHEN 10 THEN 1 WHEN 11 THEN 2 ELSE 3 END
真になる条件式が無いときはELSEの式が返され、ELSEが省略されている場合はNULLが返されます。
CASE WHEN item_count = 10 THEN 1 WHEN item_count = 11 THEN 2 ELSE 3 END
SQL関数と演算子の最後に
また、機能も微妙に違う場合もあり、それぞれのDBのリファレンスを確認するようにしてください。
特に日付に関しては、DBごとの違いが大きいので、使う時には実際の動作確認をするようにしてください。
NULLの扱いが正しく行われないと、間違った結果になってしまいます。
次回はNULLの扱い方について、関数・演算子について詳しく解説します。
同じテーマ「SQL入門」の記事
データの取得:条件指定(SELECT,WHERE)
VBAクラスの全コード:データの取得
データの取得:集約集計、並べ替え(DISTINCT,GROUP,HAVING,ORDER)
SQL関数と演算子
データベースにおけるNULLの扱い方
データベースの正規化とマスタの作成
全テーブル定義とテーブル自動作成VBA
テーブルを結合して取得(INNER JOIN,OUTER JOIN)
複数のSELECT結果を統合(UNION,UNION ALL)
データの更新(UPDATE)
データの削除(DELETE)
新着記事NEW ・・・新着記事一覧を見る
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
