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

OracleのINSTR()関数

    Oracleでは、INSTR() 関数は、指定された文字列内の部分文字列を検索し、この部分文字列の最初の文字の位置を示す整数を返します。サブストリングが見つからない場合、関数は0を返します 。

    INSTR() 少なくとも2つの引数が必要です。文字列、および部分文字列。また、オプションの3番目と4番目の引数を受け入れて、検索する開始位置と検索するオカレンスを指定できます。

    INSTR() 関数のグループと考えることもできます。 5つの別々の機能があります。 INSTR()INSTRB()INSTRC()INSTR2() 、およびINSTR4() 。各関数は、異なる方法で長さを計算します。

    構文

    構文は次のようになります:

    { INSTR
    | INSTRB
    | INSTRC
    | INSTR2
    | INSTR4
    }
    (string , substring [, position [, occurrence ] ])

    string 検索する文字列、substring 見つけるサブストリング、position は部分文字列の開始位置であり、occurrence 見つけるべきオカレンスです。

    関数は次のように長さを計算します:

    関数 を使用して長さを計算します…
    INSTR() 入力文字セットで定義された文字で、文字列の最初の文字の位置は1です。
    INSTRB() バイト
    INSTRC() Unicodeの完全な文字
    INSTR2() UCS2コードポイント
    INSTR4() UCS4コードポイント

    基本的な例は次のとおりです。

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

    結果:

    5

    INSTRB()との比較

    この例は、使用している特定の関数と関連する文字セットに応じて、結果がどのように異なるかを示しています。

    この場合、INSTR()を比較します INSTRB()を使用 :

    SELECT 
        INSTR('Böyük yağlı pişik', 'yağlı') AS INSTR,
        INSTRB('Böyük yağlı pişik', 'yağlı') AS INSTRB
    FROM DUAL;

    結果:

       INSTR    INSTRB 
    ________ _________ 
           7         9

    2つの関数が2つの異なる結果を返したことがわかります。これは、この文字列の一部の文字が2バイトを使用しているためです。

    INSTR() 関数は入力文字セットで定義された位置を返しますが、INSTRB() 関数は、バイトに基づいて位置を返します 。

    元の文字列に戻ると、結果は2つの関数間で同じです。

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

    結果:

       INSTR    INSTRB 
    ________ _________ 
           5         5 

    これは、この文字列が1文字あたり1バイトしか使用しないため、バイト単位の長さが文字数と同じであるためです。

    開始位置

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

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

    結果:

    11

    この場合、検索は最初の2回の出現後の位置8から開始されます。したがって、3番目の一致の位置を取得します。

    発生する場所を指定する

    検索するオカレンスを指定する例を次に示します。

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

    結果:

    7

    この場合、位置1から開始し、その開始位置から2番目のオカレンスを検索しました。

    ここでも同じですが、今回はoccurrenceの3つの異なる値を比較します 引数:

    SELECT 
        INSTR('That fat cat', 'at', 1, 1) AS "o1",
        INSTR('That fat cat', 'at', 1, 2) AS "o2",
        INSTR('That fat cat', 'at', 1, 3) AS "o3"
    FROM DUAL;

    結果:

       o1    o2    o3 
    _____ _____ _____ 
        3     7    11

    ただし、position 引数:

    SELECT 
        INSTR('That fat cat', 'at', 5, 1) AS "o1",
        INSTR('That fat cat', 'at', 5, 2) AS "o2",
        INSTR('That fat cat', 'at', 5, 3) AS "o3"
    FROM DUAL;

    結果:

       o1    o2    o3 
    _____ _____ _____ 
        7    11     0 

    この場合、最初のオカレンスの位置は開始位置の前にあるため、取得できません。 0も取得します 開始位置に基づいて、3回目の発生がないため、3番目の列に表示されます。

    ネガティブポジション

    位置に負の値を指定すると、開始位置が文字列の末尾から逆方向にカウントされ、Oracleはその位置から逆方向に検索します。

    SELECT INSTR('That fat cat', 'at', -3)
    FROM DUAL;

    結果:

    7

    そして、指定されたオカレンスは、その位置から逆方向にカウントされます:

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

    結果:

    3

    ヌル引数

    引数のいずれか(またはすべて)がnullの場合 、結果はnullです :

    SET NULL 'null';
    SELECT 
        INSTR(null, 'f', 1, 1) AS r1,
        INSTR('Coffee', null, 1, 1) AS r2,
        INSTR('Coffee', 'f', null, 1) AS r3,
        INSTR('Coffee', 'f', 1, null) AS r4
    FROM DUAL;

    結果:

         R1      R2      R3      R4 
    _______ _______ _______ _______ 
       null    null    null    null

    デフォルトでは、SQLclおよびSQL * Plusは、nullの場合は常に空白を返します。 SQL SELECTの結果として発生します 声明。

    ただし、SET NULLは使用できます 返される別の文字列を指定します。ここでは、文字列nullを指定しました 返却する必要があります。

    引数の数が正しくありません

    INSTR()の呼び出し 引数を渡さないとエラーが発生します:

    SELECT INSTR()
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT INSTR()
    FROM DUAL
    Error at Command Line : 1 Column : 8
    Error report -
    SQL Error: ORA-00938: not enough arguments for function
    00938. 00000 -  "not enough arguments for function"
    *Cause:    
    *Action:

    また、あまりにも多くの引数を渡すと、エラーが発生します:

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

    結果:

    Error starting at line : 1 in command -
    SELECT INSTR('Big fat cat', 'at', 1, 2, 3)
    FROM DUAL
    Error at Command Line : 1 Column : 38
    Error report -
    SQL Error: ORA-00939: too many arguments for function
    00939. 00000 -  "too many arguments for function"
    *Cause:    
    *Action:

    1. SQL、一意のキーと主キー

    2. MySQLiを使用してデータベースにデータを挿入する

    3. nvarchar連結/インデックス/nvarchar(max)不可解な動作

    4. Perconaサーバーをハイブリッドクラウドにデプロイする