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

Oracleの数値を含む行を返す

    次の例では、OracleDatabaseの特定の列に数値がある行のみが返されます。

    これらの例では、REGEXP_LIKEを使用しています 指定されたパターンに一致する値を返す関数。

    サンプルデータ

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

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

    テーブルからすべてのデータを選択しましょう:

    SELECT * FROM t1;

    結果:

    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

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

    すべての数値を返す

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

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

    結果:

    0
    1
    +1
    -1
    00.00
    73.45
    +73.45
    -73.45
    .246
    -.34e7
    1.2e+4
    

    整数を返す

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

    SELECT c1
    FROM t1 
    WHERE REGEXP_LIKE(c1, '^[0-9]+$');

    結果:

    0
    1

    数値データが含まれています

    含む行を検索する場合 数値データ(数値以外のデータも含まれている場合でも)では、次のことができます。

    SELECT c1 
    FROM t1 
    WHERE REGEXP_LIKE(c1, '[0-9]+');

    結果:

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

    あるいは、POSIXクラスを使用して同じ結果を得ることができます:

    SELECT c1 
    FROM t1 
    WHERE REGEXP_LIKE(c1, '[[:digit:]]');

    結果:

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

    1. plpgsql変数を使用してn_distinctを設定するときにエラーが発生しました

    2. c3p0で休止状態:createClob()はまだ実装されていません

    3. WHERE句にパラメータ化された値が含まれている場合にSQLServerがインデックスシークの代わりにインデックススキャンを使用するのはなぜですか

    4. Oracleで休止状態:StringプロパティをCLOB列にマッピング