SQLでゼロ埋めスペース埋めして桁数を揃えたい場合にはLPAD関数やRPAD関数を使用することで取得可能となります。DBMSによっては使用出来ないものもあります。
関数\DBMS MySQL PostgreSQL SQL Server Oracle
LPAD ○ ○ ✕ ○
RPAD ○ ○ ✕ ○
書式は「LPAD(列名,バイト数,’埋め込み文字’)」、「RPAD(列名,バイト数,’埋め込み文字’)」で指定します。第三引数の埋め込み文字を省略すると半角スペースが埋め込まれます。
サンプルではOracleでの使用例となります。
サンプルテーブル
「GOODS」テーブル
LPAD関数の使用例1
項目「GOODS_CODE」を10桁でゼロ埋めするSQL(クエリー)
SELECT LPAD (g.GOODS_CODE , 10, '0' ) FROM USER1.GOODS g;
実行結果
LPAD関数の使用例2
項目「GOODS_CODE」を10桁で全角「*」埋めするSQL(クエリー)
SELECT LPAD (g.NAME , 10, '*' ) FROM USER1.GOODS g;
実行結果 以下のように埋め込み文字へ全角文字を指定すると1文字=2バイト扱いで埋め込まれます。
RPAD関数の使用例1
項目「GOODS_CODE」を10桁でゼロ埋めするSQL(クエリー)
SELECT RPAD (g.GOODS_CODE , 10, '0' ) FROM USER1.GOODS g;
実行結果
RPAD関数の使用例2
項目「GOODS_CODE」を10桁で全角「*」埋めするSQL(クエリー)
SELECT RPAD (g.NAME , 10, '*' ) FROM USER1.GOODS g;
実行結果 RPADでも以下のように埋め込み文字へ全角文字を指定すると1文字=2バイト扱いで埋め込まれます。
SQLを見てるとたまにWHERE句内で「(+)」と記載されているのを見かけることがあります。
この「(+)」はOracle独自で記載が可能となる外部結合演算子といって、「g.GOODS_CODE = gt.GOODS_CODE(+)」のように指定するとLEFT OUTER JOINと同じ結果を取得することが出来ます。
サンプルテーブル
「GOODS」テーブル
「GOODS_TYPE」テーブル
外部結合演算子を利用したクエリー(SQL)例
SELECT g.name, gt.type_name
FROM USER1.GOODS g, USER1.GOODS_TYPE gt
WHERE g.GOODS_CODE = gt.GOODS_CODE(+);
通常の左外部結合でのクエリー(SQL)例
SELECT g.name, gt.type_name
FROM USER1.GOODS g
LEFT OUTER JOIN USER1.GOODS_TYPE gt ON g.GOODS_CODE = gt.GOODS_CODE;
実行結果
外部結合演算子、左外部結合どちらも同じ結果となります。
trimは通常、文字列の前後の半角スペースを削除して取得する場合に使用する場合が多いと思いますが、引数へLEADING、TRAILING、BOTHを指定することで任意の文字や文字列を削除して取得することが出来ます。
サンプルテーブル
「goods」テーブル
TRIMに引数「LEADING」を指定した場合
TRIMに引数「LEADING」を指定することで文字列の先頭にある任意の文字や文字列を削除することが出来ます。
クエリー(SQL)例
SELECT TRIM (LEADING '商品' From name ) FROM goods ORDER BY id;
実行結果
TRIMに引数「TRAILING」を指定した場合
TRIMに引数「TRAILING」を指定することで文字列の末尾にある任意の文字や文字列を削除することが出来ます。
クエリー(SQL)例
SELECT TRIM (TRAILING 'A' From name ) FROM goods ORDER BY id;
実行結果
TRIMに引数「BOTH」を指定した場合
TRIMに引数「BOTH」を指定することで文字列の先頭と末尾にある任意の文字や文字列を削除することが出来ます。
クエリー(SQL)例
SELECT TRIM (BOTH 'A' From name ) FROM goods ORDER BY id;
実行結果
SQLで大文字⇒小文字に変換する場合はLCASE関数 or LOWER関数、小文字⇒大文字へ変換するにはUCASE関数 or UPPER関数を使用します。DBMS毎で使用出来る関数が異なるので整理しておきます。
サンプルではPostgreSQLでの使用例となります。
関数\DBMS MySQL PostgreSQL SQL Server Oracle
UCASE
※小文字 ⇒ 大文字 ○ ✕ ✕ ✕
UPPER
※小文字 ⇒ 大文字 ✕ ○ ○ ○
LCASE
※大文字 ⇒ 小文字 ○ ✕ ✕ ✕
LOWER
※大文字 ⇒ 小文字 ✕ ○ ○ ○
サンプルテーブル
「goods」テーブル
UPPER関数(小文字 ⇒ 大文字へ変換)の使用例
クエリー(SQL)例
SELECT UPPER (name ) FROM goods ORDER BY id;
実行結果
LOWER関数(大文字 ⇒ 小文字へ変換)の使用例
クエリー(SQL)例
SELECT LOWER (name ) FROM goods ORDER BY id;
実行結果
SQLで一部の文字列を取得するにはSUBSTR関数やLEFT関数、RIGHT関数を使用することで可能となります。DBMS毎に利用できる関数に違いがありOracleではLEFT関数、RIGHT関数は使用出来ません。
関数\DBMS MySQL PostgreSQL SQL Server Oracle
SUBSTR or SUBSTRING ○ ○ ○ ○
LEFT ○ ○ ○ ✕
RIGHT ○ ○ ○ ✕
サンプルテーブル
「goods」テーブル
SUBSTR関数の使用例
LEFT関数の使用例
RIGHT関数の使用例
SQLで文字列置換をするにはREPLACE関数を使用することで可能となります。類似の関数にTRANSLATE関数がありますが、こちらは文字列単位ではなく1文字ずつ文字単位で置換します。
ここではPostgreSQLでの実行サンプルをベースに説明していきます。
サンプルテーブル
「goods」テーブル
REPLACE関数の使用例
TRANSLATE関数の使用例
SQLで文字列を結合(連結)して取得するためにはCONCAT関数やCONCAT_WS関数、文字列結合子「||」を使用することで可能となります。DBMS毎で微妙に違いはありますが、ここではPostgreSQLでの実行サンプルをベースに説明していきます。
サンプルテーブル
「goods」テーブル
CONCAT関数の使用例
文字列結合子「||」の使用例
CONCAT_WS関数の使用例
SQLで複数のSELECTで問い合わせた結果を連結したいという場合は集合演算子関数と言われる「UNION」や「UNION ALL」演算子を使用することで取得可能となります。
イメージ図
UNIONは重複行を削除して取得するので「A & C」を取得出来ます。
UNION ALLは重複行を含めて取得するので「A & B & C」を取得出来ます。
サンプルテーブル
UNIONの使用例
サンプルテーブル「goods」をUNIONで連結して取得するサンプルとなります。
SQL(クエリー)
SELECT id,name ,type_code FROM goods WHERE name = '商品A'
UNION
SELECT id,name ,type_code FROM goods WHERE type_code = '101'
出力結果
UNION ALLの使用例
サンプルテーブル「goods」をUNION ALLで連結して取得するサンプルとなります。
SQL(クエリー)
SELECT id,name ,type_code FROM goods WHERE name = '商品A'
UNION ALL
SELECT id,name ,type_code FROM goods WHERE type_code = '101'
出力結果
投稿ナビゲーション
「駑馬十駕」 IT系情報を中心に調べた事をコツコツ綴っています。