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 UPPER(<YOUR_TABLE.your_column_name>) = LOWER(<YOUR_TABLE.your_column_name>) 
于 2012-07-11T17:05:28.857 回答
2

或者这个

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

您可以使用翻译并过滤掉具有非数字字符的值,然后按列排序。

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 回答