以下は、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()
を使用できます 値を正規表現と比較し、NOT
で否定する関数 オペレーター。
Oracleの正規表現機能には、POSIX文字クラスのサポートが含まれています。したがって、[:alnum:]
を使用できます 正規表現のPOSIX文字クラスを使用して、英数字以外の文字を含む行を検索します。
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[[:alnum:]]');
結果:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
これは、英数字以外の文字のみを含む行のみを返しました。行に英数字と英数字以外の文字の両方が含まれている場合、その行は返されません。
オプション2:文字の範囲を指定する
これを行う別の方法は、正規表現内で文字の範囲を指定することです。
例:
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[A-Za-z0-9]');
結果:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
この場合、除外範囲はé
のような英数字をカバーしていませんでした 、É
、およびø
、したがって、出力は英数字以外の文字の真の表現ではありません。
範囲を拡張してこれらの文字を出力から除外する例を次に示します。
SELECT c1 FROM t1
WHERE NOT REGEXP_LIKE(c1, '[A-Za-zÀ-Þß-ÿ0-9]');
結果:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“