sql >> データベース >  >> NoSQL >> MongoDB

SQLで文字列内の文字列を検索する

    主要なDBMSのほとんどは、SQLを使用して文字列内の文字列を検索する方法を提供します。これは、SQLクエリを使用して、文字列内の部分文字列の位置を見つけることを意味します。

    INSTR()など、これを可能にするSQL関数がいくつかあります。 、 LOCATE() POSITION() 、および CHARINDEX() 。使用する関数は、DBMSによって異なり、開始位置を指定する必要があるかどうかによって異なります。

    Oracle

    OracleにはINSTR()があります 文字列内の特定の部分文字列の開始位置を返す関数。

    例:

    SELECT INSTR('Big fat cat', 'fat')
    FROM DUAL;

    結果:

    5

    これは、サブストリング fat <​​/ code> 文字列Bigfat catの5番目から始まります 。

    3番目の引数を渡すことで開始位置を指定できます。 4番目の引数を渡して、検索するオカレンスを指定することもできます。

    SELECT INSTR('That fat cat', 'at', 1, 2)
    FROM DUAL;

    結果:

    7

    この場合、 1の位置から検索を開始しました。 2番目のオカレンスを検索しました( 2 を使用) 4番目の引数として)。

    OracleにはINSTRB()もあります バイト単位で位置を返すことを除いて、同様のことを行う関数。

    MySQL

    MySQLにはINSTR()があります 同じ名前のOracleDatabaseの関数と同様のことを行う関数:

    SELECT INSTR('Cats and dogs like to run', 'dogs');

    結果:

    10

    ただし、開始位置を指定する必要がある場合は、 LOCATE()のいずれかを使用する必要があります またはPOSITION()

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

    結果:

    31

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

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

    POSITION() 関数は、 LOCATE()の2つの引数の構文の同義語です。 、ただし構文が少し異なります( POSITION() 開始位置を指定することはできません。

    MySQLにはREGEX_INSTR()もあります 指定されたパターンで指定された正規表現に一致する文字列の部分文字列の開始インデックスを返す関数。

    MariaDB

    MySQLと同様に、MariaDBにも INSTR()があります 関数、および LOCATE() およびPOSITION() 機能:

    SELECT 
        INSTR('No news is good news', 'news') AS "INSTR",
        POSITION('news' IN 'No news is good news') AS "POSITION",
        LOCATE('news', 'No news is good news') AS "LOCATE 1",
        LOCATE('news', 'No news is good news', 5) AS "LOCATE 2";

    結果:

    +-------+----------+----------+----------+
    | INSTR | POSITION | LOCATE 1 | LOCATE 2 |
    +-------+----------+----------+----------+
    |     4 |        4 |        4 |       17 |
    +-------+----------+----------+----------+

    MariaDBにはREGEX_INSTR()もあります 指定されたパターンで指定された正規表現に一致する文字列の部分文字列の開始インデックスを返す関数。

    SQL Server

    SQL Serverに関しては、 CHARINDEX() 機能は私たちが探しているものです:

    SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);

    結果:

    17

    この場合、オプションの3番目の引数を使用して開始位置を指定しました。

    SQLServerにはPATINDEX()もあります 文字列内のパターンを検索する関数。

    SQLite

    SQLiteにはINSTR()があります 私たちのニーズを満たすための機能:

    SELECT INSTR('Black cat', 'lack');

    結果:

    2

    PostgreSQL

    PostgreSQLでは、 POSITION()を使用する必要があります 機能:

    SELECT POSITION('Break' IN 'Bangkok Breaking');

    結果:

    9

    1. MongoDb合計クエリ

    2. SQLで短い月の名前を取得する方法

    3. マングースで2つのORクエリをANDと組み合わせる

    4. ObjectIdに対する正規表現を使用してMongoDBをクエリします