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」を返す点に注意してください。
-
MySQLクエリで使える独自の関数(ユーザー定義関数)の作成方法
はい、MySQLでは独自の関数(ユーザー定義関数)を作成し、クエリの中で使用することができます。カスタム関数を定義するには CREATE FUNCTION ステートメントを使用します。独自関数を作成する基本構文DELIMITER //CREATE FUNCTION 関数名(引数 データ型, ...) RETURNS 戻り値のデータ型DETERMINISTIC NO SQLBEGIN 処理1; ... 処理N;END//DELIMITER ;各キーワードの意味は以下のとおりです。DETERMINISTIC:同じ入力に対して常に同じ結果を返すことを示します。バイナリログが有効な環境では、この宣言が
-
MySQLでOracleのTRUNC(SYSDATE)と同等の処理を行う方法|DATE()とCURDATE()の使い方
はい、可能です。MySQLでは DATE() 関数を使えばdatetime型の値から日付部分のみを取り出すことができ、CURDATE() 関数を使えば現在の日付を取得できます。この2つを組み合わせることで、Oracleの TRUNC(SYSDATE) と同様の「本日の日付だけを比較する」処理が実現できます。1. 現在の日付を確認するまず、CURDATE()で現在の日付を取得してみましょう。mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-10-20 | +----------