以下は、OracleDatabaseで英数字のみを含む行を返すための2つのメソッドです。
英数字は、英字と英数字です。
例では、次のデータを使用します。
CREATE TABLE t1 (
c1 varchar(255) NULL
);
INSERT INTO t1 (c1)
WITH c AS (
SELECT 'Music' FROM DUAL UNION ALL
SELECT 'Live Music' FROM DUAL UNION ALL
SELECT 'Café' FROM DUAL UNION ALL
SELECT 'Café Del Mar' FROM DUAL UNION ALL
SELECT '100 Cafés' FROM DUAL UNION ALL
SELECT '[email protected]' FROM DUAL UNION ALL
SELECT '1 + 1' FROM DUAL UNION ALL
SELECT '()' FROM DUAL UNION ALL
SELECT '[email protected]#&()–[{}]:;'',?/*' FROM DUAL UNION ALL
SELECT '`~$^+=<>“' FROM DUAL UNION ALL
SELECT '$1.50' FROM DUAL UNION ALL
SELECT 'Player 456' FROM DUAL UNION ALL
SELECT '007' FROM DUAL UNION ALL
SELECT 'é' FROM DUAL UNION ALL
SELECT 'É' FROM DUAL UNION ALL
SELECT 'é 123' FROM DUAL UNION ALL
SELECT 'ø' FROM DUAL UNION ALL
SELECT 'ø 123' FROM DUAL)
SELECT * FROM c;
SELECT c1 FROM t1;
結果:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 () [email protected]#&()–[{}]:;',?/* `~$^+=<>“ $1.50 Player 456 007 é É é 123 ø ø 123
オプション1:[:alnum:]
と比較
OracleのREGEXP_LIKE()
を使用できます 値を正規表現と比較する関数。
Oracleの正規表現機能には、POSIX文字クラスのサポートが含まれています。したがって、[:alnum:]
を使用できます 英数字を含む行を検索するための正規表現のPOSIX文字クラス。
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '^[[:alnum:]]+$');
結果:
Music Café 007 é É ø
これにより、英数字のみを含む行のみが返されました。行に英数字と英数字以外の文字の両方が含まれている場合、その行は返されません。
スペース文字は英数字ではないと見なされるため、スペースを含める場合は、次のようにすることができます。
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '^[[:alnum:] ]+$');
結果:
Music Live Music Café Café Del Mar 100 Cafés Player 456 007 é É é 123 ø ø 123
含むすべての行を返す 英数字(行に英数字以外の文字も含まれている場合でも)、これを行うことができます:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:alnum:]]');
結果:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é É é 123 ø ø 123
オプション2:文字の範囲を指定する
これを行う別の方法は、正規表現内で文字の範囲を指定することです。
例:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '^[A-Za-z0-9]+$');
結果:
Music 007
これにより、最初の例よりも返される行が少なくなります。これは、é
を含めなかったためです。 、É
、またはø
私の範囲内の文字であるため、それらの文字を含む行はすべて出力から除外されます。
したがって、この方法を使用するときは、含める必要のある文字を誤って除外した場合に備えて注意する必要があります。
ここでも、これらの文字を含む範囲があります:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '^[A-Za-zÀ-Þß-ÿ0-9]+$');
結果:
Music Café 007 é É ø
次のようなスペースを含めることができます:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '^[A-Za-zÀ-Þß-ÿ0-9 ]+$');
結果:
Music Live Music Café Café Del Mar 100 Cafés Player 456 007 é É é 123 ø ø 123
また、以下を使用して、含むすべての行を含めることができます。 私たちの範囲の文字(この範囲外の文字も含まれている場合でも):
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[A-Za-zÀ-Þß-ÿ0-9]');
結果:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é É é 123 ø ø 123
または、これらのUnicode文字を含めたくない場合は、次のように簡略化できます:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[A-Za-z0-9]');
結果:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é 123 ø 123
これらのUnicode文字が英数字と行を共有している場合、これは出力から除外されません。