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

Oracle/SQLiteで文字列から部分文字列を抽出する方法

    問題:

    文字列の列があり、それらから部分文字列を取得したいと考えています。

    例1:

    emails テーブルには、メールの列があります。各メールの最初の7文字を表示したい。

    表は次のようになります:

    メール
    [email protected]
    [email protected]
    [email protected]
    [email protected]

    ソリューション1:

    SELECT
      email,
      SUBSTR(email, 1, 7) AS substring
    FROM emails;
    

    結果は次のとおりです。

    メール 部分文字列
    [email protected] jake99 @
    [email protected] タマラブ
    [email protected] notine @
    [email protected] ジェシカ

    ディスカッション:

    SUBSTR()を使用する 働き。最初の引数は文字列または列名です。 2番目の引数は、部分文字列を開始する文字のインデックスです。 3番目の引数は部分文字列の長さです。

    気を付けて!他のプログラミング言語とは異なり、インデックスは1から始まります 、0ではありません。これは、最初の文字のインデックスが1、2番目の文字のインデックスが2などであることを意味します。

    >SUBSTR(email, 1, 7) メール列の値のサブストリングを返します。最初の文字から始まり、7文字になります。

    例2:

    インデックス2と6の間の部分文字列を表示したい。

    ソリューション2:

    SELECT
      email,
      SUBSTR(email, 2, 5) AS substring
    FROM emails;
    

    結果は次のとおりです。

    メール 部分文字列
    [email protected] ake99
    [email protected] アマラ
    [email protected] otine
    [email protected] エッシック

    ディスカッション:

    SUBSTR()を使用します 前の例と同じように機能します。今回は、インデックス2から開始するため、関数の2番目の引数は2です。サブストリングの長さは5(end_index - start_index + 1)です。 。

    例3:

    @記号で始まり、文字列の最後で終わる部分文字列を表示したいのですが、正確なインデックスまたは長さがわかりません。

    ソリューション3:

    SELECT
      email,
      SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) AS substring
    FROM emails;
    

    結果は次のとおりです。

    メール 部分文字列
    [email protected] @gmail.com
    [email protected] @zoho.com
    [email protected] @ yahoo.fr
    [email protected] @ onet.pl

    ディスカッション:

    SUBSTR()を使用します 前の例と同じように機能します。今回は、行ごとに位置が異なる特定のキャラクターを探しています。特定の文字のインデックスを見つけるには、INSTR(column, character)を使用できます。 関数。ここで、columnはリテラル文字列またはサブ文字列を取得する列であり、characterはcharacterです。 サブストリングを開始する場所(ここでは、@

    SUBSTR()の3番目の引数 関数は部分文字列の長さです。 INSTR()を使用して計算できます およびLENGTH() 関数。これを行うには、列の長さからインデックスを減算してから1を加算します。

    LENGTH(email) - INSTR(email, '@') + 1
    

    文字列の最後ではなく、特定の文字(たとえば、「。」の前)で終わる部分文字列を取得することもできます。これを行う方法は次のとおりです。

    SELECT
      email,
      SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(email, '@')) AS substring
    FROM emails;
    

    このクエリの結果は次のとおりです。

    メール 部分文字列
    [email protected] @gmail
    [email protected] @zoho
    [email protected] @yahoo
    [email protected] @onet

    パーツINSTR(email, '.') - INSTR(email, '@') 部分文字列の長さを計算するだけです。


    1. Sind()がPostgreSQLでどのように機能するか

    2. SQLServerで重大度の高いエラーに対処する

    3. PostgreSQLのsecurity_barrierビューはどのように機能しますか?

    4. Oracleのインデックスとテーブルの所有者に関する情報を取得するにはどうすればよいですか?