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

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

    問題:

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

    例1:

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

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

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

    ソリューション1:

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

    別の構文:

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

    結果は次のとおりです。

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

    ディスカッション:

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

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

    SUBSTRING(email, 1, 7) 文字列の先頭(最初の文字)から始まり、7文字になる電子メール列の値のサブ文字列を返します。もう1つの表記、SUBSTRING(email FROM 1 FOR 7) 、まったく同じことをします。 FROMの後の引数 は開始インデックスであり、FORの後の引数です は部分文字列の長さです。

    SUBSTRING()の3番目の引数 機能はオプションです。これを省略すると、2番目の引数のインデックスから始まり、文字列の最後まで続く部分文字列が取得されます。 SUBSTRING(email, 1) SUBSTRING(email FROM 1)と同様に、文字列全体を返します。 。

    例2:

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

    ソリューション2:

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

    別の構文:

    SELECT
      email,
      SUBSTRING(email FROM POSITION('@' IN email)) AS substring
    FROM emails;
    

    結果は次のとおりです。

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

    ディスカッション:

    SUBSTRING()を使用します 前の例のように機能します。今回は、行ごとに位置が異なる特定のキャラクターを探しています。特定の文字のインデックスを見つけるには、POSITION(character IN column)を使用できます。 関数。ここで、characterは、部分文字列を開始する特定の文字です(ここでは、@ )。引数の列はcolumnです そこから部分文字列を取得します。リテラル文字列にすることもできます。

    サブストリングを元のストリングの最後まで移動させたい場合は、SUBSTRING()の3番目の引数 関数(またはFOR 引数)は必要ありません。それ以外の場合は、部分文字列の長さである必要があります。または、POSITION()を使用して計算できます。 働き。文字列の最後ではなく、特定の文字(たとえば、「。」の前)で終わる部分文字列を取得することもできます。次に例を示します:

    SELECT
      email,
      SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring
    FROM emails;
    

    別の構文:

    SELECT
      email,
      SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN email)) AS substring
    FROM emails;
    

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

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

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


    1. PL / SQLのファイルからBLOBを取得する方法は?

    2. T-SQLで年ごとにグループ化する方法

    3. SparkDataframesUPSERTからPostgresテーブルへ

    4. SQLServerデータベース内のすべてのビューを一覧表示する4つの方法