次の例では、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