sql >> データベース >  >> RDS >> Mysql

MySQLでのLOCATE()関数のしくみ

    MySQLでは、LOCATE() 関数は、文字列内の部分文字列の位置を返します。具体的には、文字列内の最初の出現位置、または指定された開始点の後の最初の出現位置を返します。

    構文

    次のいずれかの方法で使用できます。

    LOCATE(substr,str)
    LOCATE(substr,str,pos)

    substr は検索する部分文字列であり、str 検索する文字列です。

    2番目の構文を使用する場合、pos 検索を開始する位置です。

    例1-最初の構文

    最初の構文を使用した例を次に示します。

    SELECT LOCATE('cat', 'One cat jumped over the other cat') AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      5 |
    +--------+

    例2–2番目の構文

    検索を開始する開始位置を指定する例を次に示します。

    SELECT LOCATE('cat', 'One cat jumped over the other cat', 6) AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |     31 |
    +--------+

    この場合、catの最初の出現 位置5から開始しますが、検索を位置6から開始するように指定しました。したがって、その文字列の次の出現位置は、返された位置でした。

    検索は位置6から開始されましたが、関数は開始位置からではなく、文字列内の部分文字列の位置を返すことに注意してください。

    これを明確にするための別の例を次に示します。

    SELECT 
      LOCATE('c', 'a b c', 1) AS 'Result 1',
      LOCATE('c', 'a b c', 2) AS 'Result 2',
      LOCATE('c', 'a b c', 4) AS 'Result 3';

    結果:

    +----------+----------+----------+
    | Result 1 | Result 2 | Result 3 |
    +----------+----------+----------+
    |        5 |        5 |        5 |
    +----------+----------+----------+

    検索を開始しても結果は同じです。

    例3–単語の一部を見つける

    部分文字列は長い単語の一部にすることができます:

    SELECT LOCATE('sing', 'Increasingly') AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      7 |
    +--------+

    実際、単語である必要はありません(結局のところ、文字列を検索しているだけです):

    SELECT 
      LOCATE('z23!#', 'u_4, z23!#') AS 'Result 1',
      LOCATE(' ', 'a b c') AS 'Result 2',
      LOCATE(',', 'cat, dog, bird') AS 'Result 3';

    結果:

    +----------+----------+----------+
    | Result 1 | Result 2 | Result 3 |
    +----------+----------+----------+
    |        6 |        2 |        4 |
    +----------+----------+----------+

    例4–一致なし

    サブストリングが見つからない場合は、 0 返されます:

    SELECT LOCATE('Bat', 'Increasingly') AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      0 |
    +--------+

    例5–大文字と小文字の区別

    この関数はマルチバイトセーフであり、少なくとも1つの引数がバイナリ文字列である場合にのみ大文字と小文字が区別されます。

    したがって、大文字と小文字が一致しなくても、以下は非バイナリ文字列で機能します。

    SELECT LOCATE('Sing', 'Increasingly') AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      7 |
    +--------+

    ただし、バイナリ文字列を使用すると、次のようになります。

    SET @str = BINARY 'Increasingly'; 
    SELECT LOCATE('Sing', @str) AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      0 |
    +--------+

    ただし、もちろん、ケースが一致するように変更すると、一致が得られます:

    SET @str = BINARY 'Increasingly'; 
    SELECT LOCATE('sing', @str) AS Result;

    結果:

    +--------+
    | Result |
    +--------+
    |      7 |
    +--------+

    例6–NULL引数

    引数のいずれかがNULLの場合 、 NULL 返されます:

    SELECT 
      LOCATE(NULL, 'Increasingly') a,
      LOCATE('Bat', NULL) b,
      LOCATE('Bat', 'Increasingly', NULL) c;

    結果:

    +------+------+------+
    | a    | b    | c    |
    +------+------+------+
    | NULL | NULL | NULL |
    +------+------+------+

    1. リンクサーバーのOLEDBプロバイダーMicrosoft.Jet.OLEDB.4.0のインスタンスを作成できませんnull

    2. SQLServerでデータベースの破損に対処する方法を知る方法

    3. OracleのSYSDATE関数

    4. R12.2のデータモデルの論理ビュー