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

PostgreSQLデータベース列から数値以外の値を返す

    次のPostgreSQLの例では、特定の列に数値がない行のみが返されます。

    サンプルデータ

    サンプルデータを使用してテーブルを作成しましょう:

    DROP TABLE IF EXISTS t1;
    CREATE TABLE t1 (
        c1 varchar(255)
    );
    
    INSERT INTO t1 (c1) VALUES 
        ('0'),
        ('1'),
        ('+1'),
        ('-1'),
        ('00.00'),
        ('73.45'),
        ('+73.45'),
        ('-73.45'),
        ('.246'),
        ('-.34e7'),
        ('12.e-3'),
        ('1.2e+4'),
        ('a'),
        ('9afc'),
        ('e7'),
        ('+e0'),
        ('Ten'),
        ('5 Dollars');
    
    SELECT * FROM t1;

    これでテーブルが作成され、次のデータが含まれています。

        c1     
    -----------
     0
     1
     +1
     -1
     00.00
     73.45
     +73.45
     -73.45
     .246
     -.34e7
     12.e-3
     1.2e+4
     a
     9afc
     e7
     +e0
     Ten
     5 Dollars

    列はvarchar(255)です 列なので、数値ではありません。数字を含めることができます(実際に含めることができます)が、これらは文字データとして保存されます。任意のテキストを含めることもできます(これは含まれます)。

    数値以外の値を返す

    次のクエリを使用して、上記の表から数値以外の値を返すことができます。

    SELECT c1
    FROM t1 
    WHERE c1 !~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

    結果:

        c1     
    -----------
     12.e-3
     a
     9afc
     e7
     +e0
     Ten
     5 Dollars

    非整数を返す

    非整数のみを返したい場合は、クエリをはるかに簡単にすることができます:

    SELECT c1
    FROM t1 
    WHERE c1 !~ '^[0-9]+$';

    結果:

        c1     
    -----------
     +1
     -1
     00.00
     73.45
     +73.45
     -73.45
     .246
     -.34e7
     12.e-3
     1.2e+4
     a
     9afc
     e7
     +e0
     Ten
     5 Dollars
    >

    数値データが含まれていません

    数値データを含まない行を検索する場合は、次のように実行できます。

    SELECT c1 
    FROM t1 
    WHERE c1 !~ '[0-9]+';

    結果:

     c1  
    -----
     a
     Ten

    PostgreSQLでは、!~ 指定された正規表現と一致しない値を返すために使用される大文字と小文字を区別する演算子です。大文字と小文字を区別しない一致の場合は、!~*を使用します 。

    ~を使用できます 実行するすべての行を返す 正規表現に一致します(および~* 大文字と小文字を区別しない一致の場合)。


    1. Djangoの新しいPostgres機能を楽しんでください

    2. SQL ServerExpress用のSQLServerプロファイラーはありますか?

    3. SQL2008RDLファイルをSQL2005に変換する

    4. T-SQLで結果を制限する方法