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: