MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

LOCATE()関数と同じ働きをするMySQLの関数とは?INSTR()とPOSITION()の使い方

MySQLには、LOCATE()関数とまったく同じように動作する文字列検索関数が2つあります。それがINSTR()関数とPOSITION()関数です。どちらもLOCATE()関数の同義語(シノニム)として定義されており、文字列の中から指定した部分文字列を検索し、最初に見つかった位置を返します。

INSTR()関数とは

INSTR()関数は、文字列から部分文字列を検索し、その部分文字列が最初に出現する位置を返します。構文は以下のとおりです。

構文

INSTR(string, substring)
  • string:MySQLが検索対象とする元の文字列
  • substring:検索したい部分文字列

使用例

mysql> Select INSTR('Ram is a good boy', 'good') As Result;
+--------+
| Result |
+--------+
|     10 |
+--------+
1 row in set (0.00 sec)

この例では、文字列「Ram is a good boy」の中で「good」が最初に現れる位置である「10」が返されます。

POSITION()関数とは

POSITION()関数も同様に、文字列から部分文字列を検索し、最初に出現する位置を返します。構文は以下のとおりです。

構文

POSITION(substring IN string)
  • string:検索対象となる元の文字列
  • substring:検索したい部分文字列
  • IN:文字列と部分文字列をつなぐキーワード

使用例

mysql> Select POSITION('good' in 'Ram is a good boy') As Result;
+--------+
| Result |
+--------+
|     10 |
+--------+
1 row in set (0.00 sec)

こちらの例でも、「good」の位置として「10」が返されます。

まとめ

INSTR()とPOSITION()は、引数の書き方こそ異なるものの、動作結果はLOCATE()と完全に同一です。SQL標準に近い記述スタイルのPOSITION()、シンプルな引数順のINSTR()など、可読性や用途に応じて使い分けるとよいでしょう。なお、部分文字列が見つからなかった場合は、いずれの関数も「0」を返す点に注意してください。

  1. MySQLクエリで使える独自の関数(ユーザー定義関数)の作成方法

    はい、MySQLでは独自の関数(ユーザー定義関数)を作成し、クエリの中で使用することができます。カスタム関数を定義するには CREATE FUNCTION ステートメントを使用します。独自関数を作成する基本構文DELIMITER //CREATE FUNCTION 関数名(引数 データ型, ...) RETURNS 戻り値のデータ型DETERMINISTIC NO SQLBEGIN 処理1; ... 処理N;END//DELIMITER ;各キーワードの意味は以下のとおりです。DETERMINISTIC:同じ入力に対して常に同じ結果を返すことを示します。バイナリログが有効な環境では、この宣言が

  2. MySQLでOracleのTRUNC(SYSDATE)と同等の処理を行う方法|DATE()とCURDATE()の使い方

    はい、可能です。MySQLでは DATE() 関数を使えばdatetime型の値から日付部分のみを取り出すことができ、CURDATE() 関数を使えば現在の日付を取得できます。この2つを組み合わせることで、Oracleの TRUNC(SYSDATE) と同様の「本日の日付だけを比較する」処理が実現できます。1. 現在の日付を確認するまず、CURDATE()で現在の日付を取得してみましょう。mysql> select curdate(); +------------+ | curdate()  | +------------+ | 2019-10-20 | +----------