「SQL」タグアーカイブ

SQL:TRIM関数を使って任意の文字や文字列を削除する方法

trimは通常、文字列の前後の半角スペースを削除して取得する場合に使用する場合が多いと思いますが、引数へLEADING、TRAILING、BOTHを指定することで任意の文字や文字列を削除して取得することが出来ます。

サンプルテーブル

  • 「goods」テーブル

TRIMに引数「LEADING」を指定した場合

TRIMに引数「LEADING」を指定することで文字列の先頭にある任意の文字や文字列を削除することが出来ます。

  • クエリー(SQL)例
  • 実行結果

TRIMに引数「TRAILING」を指定した場合

TRIMに引数「TRAILING」を指定することで文字列の末尾にある任意の文字や文字列を削除することが出来ます。

  • クエリー(SQL)例
  • 実行結果

TRIMに引数「BOTH」を指定した場合

TRIMに引数「BOTH」を指定することで文字列の先頭と末尾にある任意の文字や文字列を削除することが出来ます。

  • クエリー(SQL)例
  • 実行結果

SQL:大文字 ⇒ 小文字、小文字 ⇒ 大文字へ変換する方法

SQLで大文字⇒小文字に変換する場合はLCASE関数 or LOWER関数、小文字⇒大文字へ変換するにはUCASE関数 or UPPER関数を使用します。DBMS毎で使用出来る関数が異なるので整理しておきます。

サンプルではPostgreSQLでの使用例となります。

 

関数\DBMSMySQLPostgreSQLSQL ServerOracle
UCASE
※小文字 ⇒ 大文字
UPPER
※小文字 ⇒ 大文字
LCASE
※大文字 ⇒ 小文字
LOWER
※大文字 ⇒ 小文字
 

サンプルテーブル

  • 「goods」テーブル

UPPER関数(小文字 ⇒ 大文字へ変換)の使用例

  • クエリー(SQL)例
  • 実行結果

LOWER関数(大文字 ⇒ 小文字へ変換)の使用例

  • クエリー(SQL)例
  • 実行結果

SQLで一部の文字列を取得する方法

SQLで一部の文字列を取得するにはSUBSTR関数やLEFT関数、RIGHT関数を使用することで可能となります。DBMS毎に利用できる関数に違いがありOracleではLEFT関数、RIGHT関数は使用出来ません。

関数\DBMSMySQLPostgreSQLSQL ServerOracle
SUBSTR or SUBSTRING
LEFT
RIGHT
 

サンプルテーブル

  • 「goods」テーブル

SUBSTR関数の使用例

LEFT関数の使用例

RIGHT関数の使用例

SQLで文字列置換や文字置換する方法

SQLで文字列置換をするにはREPLACE関数を使用することで可能となります。類似の関数にTRANSLATE関数がありますが、こちらは文字列単位ではなく1文字ずつ文字単位で置換します。

ここではPostgreSQLでの実行サンプルをベースに説明していきます。

サンプルテーブル

  • 「goods」テーブル

REPLACE関数の使用例

TRANSLATE関数の使用例

SQLで文字列を結合(連結)する方法

SQLで文字列を結合(連結)して取得するためにはCONCAT関数やCONCAT_WS関数、文字列結合子「||」を使用することで可能となります。DBMS毎で微妙に違いはありますが、ここではPostgreSQLでの実行サンプルをベースに説明していきます。

サンプルテーブル

  • 「goods」テーブル

CONCAT関数の使用例

文字列結合子「||」の使用例

CONCAT_WS関数の使用例

SQL:UNION、UNION ALL演算子の使用方法

SQLで複数のSELECTで問い合わせた結果を連結したいという場合は集合演算子関数と言われる「UNION」や「UNION ALL」演算子を使用することで取得可能となります。

イメージ図

  • UNIONは重複行を削除して取得するので「A & C」を取得出来ます。
  • UNION ALLは重複行を含めて取得するので「A & B & C」を取得出来ます。

サンプルテーブル

UNIONの使用例

サンプルテーブル「goods」をUNIONで連結して取得するサンプルとなります。

  • SQL(クエリー)
  • 出力結果

UNION ALLの使用例

サンプルテーブル「goods」をUNION ALLで連結して取得するサンプルとなります。

  • SQL(クエリー)
  • 出力結果

 

SQL:システム日付(現在日付)を取得する方法

SQLでシステム日付を取得するにはMySQLやPostgreSQlとOracleでは少し異なるのでメモしておきます。

システム日付を取得するSQL:MySQL、PostgreSQL

date型で取得、time型で取得、timestamp型で取得する方法がありますがOracleのsysdateに相当するという意味でtimestamp型の方法をご紹介します。

または

システム日付を取得するSQL:Oracle

 

PostgreSQL:年、月、日、時、分、秒以下を切り捨てて取得する方法

OracleでのTRUC関数と類似したものにPostgreSQLではDATE_TRUNC関数があります。

DATE_TRUNC関数は「DATE_TRUNC([‘精度’],[列名])」形式で指定する事で取得できます。

使用例

サンプルテーブル「goods」

クエリー(SQL)

サンプルテーブル「goods」のtype_code=’102’のadd_dateをサンプルとしてDATE_TRUNC関数で抽出してみます。

出力結果

SQL:最大値と最小値を求める方法

SQLで最大値と最小値を求めるにはMAX関数とMIN関数を使用します。

使用例

  • サンプルテーブル「goods」
  • クエリー(SQL)

    サンプルテーブル「goods」のtype_codeの最大値と最小値を抽出しているサンプルとなります。

  • 出力結果

 

SQL:IN句からEXISTS句への変換方法

IN句をEXISTS句へ変換するとパフォーマンスが向上すると言われることがあるので

IN句からEXISTS句への変換例をメモしておきます。

サンプルテーブル

以下の商品テーブル「goods」と属性コードテーブル「type_code」を元に説明します。

    商品テーブル「goods」属性コードテーブル「type_code」

IN句を使用したSQL例

商品テーブル「goods」のtype_codeが ‘101’で属性コードテーブル「type_code」にも存在する商品名を取得する例となります。

EXISTS句を使用したSQL例

WHERE句後の「tc.code IN」を「EXISTS」に変更し、「AND type_code = tc.code」を追加しただけです。

出力結果(IN句、EXISTS句)

IN句、EXISTS句どちらの場合も以下の結果となります。

NOT EXISTS句を使用したSQL例

EXISTS句は使い慣れてないと今一つ分かりにくい気がするので、上記のEXISTSをNOT EXISTSで実行してみた例も記載しておきます。なんとなくEXISTSがどういう結果を出力しているかわかるかも。。

出力結果(NOT EXISTS句)

NOT EXISTS句の結果は以下となります。