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

OracleのSUBSTR()関数

    Oracleでは、SUBSTR() 関数は、指定された文字列から部分文字列を返します。

    SUBSTR() 少なくとも2つの引数が必要です。文字列、およびサブ文字列を抽出する位置。また、サブストリングの長さを指定できるオプションの3番目の引数も受け入れます。

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

    構文

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

    { SUBSTR
    | SUBSTRB
    | SUBSTRC
    | SUBSTR2
    | SUBSTR4
    }
    (char, position [, substring_length ])

    char 文字列、position は部分文字列の開始位置であり、substring_length 抽出する文字の長さです。

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

    関数 を使用して長さを計算します…
    SUBSTR() 入力文字セットで定義された文字
    SUBSTRB() バイト
    SUBSTRC() Unicodeの完全な文字
    SUBSTR2() UCS2コードポイント
    SUBSTR4() UCS4コードポイント

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

    SELECT SUBSTR('Big fat cat', 5)
    FROM DUAL;

    結果:

    fat cat

    SUBSTRB()との比較

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

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

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

    結果:

              SUBSTR           SUBSTRB 
    ________________ _________________ 
    k yağlı pişik    ük yağlı pişik   

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

    SUBSTR() 関数は、入力文字セットで定義された長さをc haractersで返しますが、SUBSTRB() 関数は長さをバイトで返します 。

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

    SELECT 
        SUBSTR('Big fat cat', 5) AS SUBSTR,
        SUBSTRB('Big fat cat', 5) AS SUBSTRB
    FROM DUAL;

    結果:

        SUBSTR    SUBSTRB 
    __________ __________ 
    fat cat    fat cat   

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

    部分文字列の長さ

    抽出する部分文字列の長さを指定する例を次に示します。

    SELECT SUBSTR('Big fat cat', 5, 3)
    FROM DUAL;

    結果:

    fat

    SUBSTR()の比較は次のとおりです およびSUBSTRB() マルチバイト文字の長さを指定する場合:

    SELECT 
        SUBSTR('Böyük yağlı pişik', 5, 9) AS SUBSTR,
        SUBSTRB('Böyük yağlı pişik', 5, 9) AS SUBSTRB
    FROM DUAL;

    結果:

          SUBSTR    SUBSTRB 
    ____________ __________ 
    k yağlı p    ük yağl    

    ゼロ位置

    この関数の1つの癖は、0の位置を渡すことです。 1を渡すのと同じ結果が生成されます :

    SELECT 
        SUBSTR('Big fat cat', 0, 3) AS "0",
        SUBSTR('Big fat cat', 1, 3) AS "1"
    FROM DUAL;

    結果:

         0      1 
    ______ ______ 
    Big    Big   

    ネガティブポジション

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

    SELECT SUBSTR('Big fat cat', -3)
    FROM DUAL;

    結果:

    cat

    そして、指定された長さは、その位置から前方に数えられます:

    SELECT SUBSTR('Big fat cat', -7, 3)
    FROM DUAL;

    結果:

    fat

    ヌル引数

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

    SET NULL 'null';
    SELECT 
        SUBSTR(null, 3, 3) AS r1,
        SUBSTR('Coffee', null, 3) AS r2,
        SUBSTR('Coffee', 3, null) AS r3,
        SUBSTR(null, null, null) AS r4
    FROM DUAL;

    結果:

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

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

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

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

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

    SELECT SUBSTR()
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT SUBSTR()
    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 SUBSTR('Big fat cat', 3, 2, 1)
    FROM DUAL;

    結果:

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

    1. OracleからMySQLに移行する

    2. mysql接続を閉じることは重要ですか?

    3. Microsoft OLE DB非推奨!ロングライブADO!

    4. トレースフラグ2389と新しいカーディナリティ推定量