6

where句に数字以外のものが含まれているデータを特定するにはどうすればよいですか?

4

6 に答える 6

14
SELECT *
  FROM <table>
 WHERE REGEXP_LIKE(<column>, '[^[:digit:]]');

それが役に立てば幸い...

于 2012-06-27T10:54:35.353 に答える
5

次のように、TRANSLATE関数を使用してこれを行うこともできます。

SELECT *
  FROM A_TABLE a
  WHERE LENGTH(TRANSLATE(a.FIELD, 'x0123456789', 'x')) IS NOT NULL

フィールドに数字のみが含まれている場合、式LENGTH(TRANSLATE(a.FIELD, 'x0123456789', 'x'))はNULLを返します。非数字が存在する場合は、非数字の数が返されます。

共有してお楽しみください。

于 2012-06-27T11:03:37.227 に答える
3

これを試して

SELECT *
FROM table
WHERE regexp_like(column_name,'[^0-9]+');`

これにより、列に数字以外の文字が含まれるすべての行が選択されます。

詳細については、このページを確認してください。

于 2013-01-01T14:03:14.573 に答える
2

またはこれ

select * from <YOUR_TABLE>
where LENGTH(REPLACE(TRANSLATE(<YOUR_TABLE.your_column_name>,
                               ’0123456789′, ‘@@@@@@@@@@’), ‘@’, NULL)) > 0;
于 2012-06-27T11:03:58.810 に答える
2

完璧ではありませんが(「#」、「@」などの文字は考慮されていません)、迅速で汚い解決策は次のとおりです。

SELECT * FROM <YOUR_TABLE>
WHERE UPPER(<YOUR_TABLE.your_column_name>) = LOWER(<YOUR_TABLE.your_column_name>) 
于 2012-07-11T17:05:28.857 に答える
0

Translateを使用して、数字以外の文字を含む値をフィルターで除外し、列で並べ替えることができます。

select * from (
    select case  WHEN trn > 0 then NULL  else fld1 end New_column, fld1,trn FROM 
        (
        SELECT '123ab' fld1, LENGTH(TRIM(TRANSLATE('123ab', ' +-.0123456789',' '))) trn FROM dual UNION ALL
        SELECT 'a123b', LENGTH(TRIM(TRANSLATE('a123b', ' +-.0123456789',' '))) FROM dual UNION ALL
        SELECT '1256.54', LENGTH(TRIM(TRANSLATE('1256.54', ' +-.0123456789',' '))) FROM dual UNION ALL
        SELECT '4567899', LENGTH(TRIM(TRANSLATE('4567899', ' +-.0123456789',' '))) FROM dual UNION ALL
        SELECT '-56',LENGTH(TRIM(TRANSLATE ('-56', ' +-.0123456789',' '))) FROM dual
        )
)order by new_column        
于 2020-11-19T21:37:01.367 に答える