简体   繁体   English

Oracle SQL - 在字段中查找特殊的非数字字符

[英]Oracle SQL - Find special non numeric characters in field

如何识别在 where 子句中除了数字之外还有其他任何内容的数据?

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

Hope it helps...希望能帮助到你...

You can also use the TRANSLATE function to do this, as follows:您还可以使用 TRANSLATE 函数来执行此操作,如下所示:

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

The expression LENGTH(TRANSLATE(a.FIELD, 'x0123456789', 'x')) will return NULL if the field contains only numeric characters.如果字段仅包含数字字符,则表达式LENGTH(TRANSLATE(a.FIELD, 'x0123456789', 'x'))将返回 NULL。 If non-numeric characters are present it will return the number of non-numeric characters.如果存在非数字字符,它将返回非数字字符的数量。

Share and enjoy.分享和享受。

Try this尝试这个

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

This will pick all those rows which have non numeric characters in the column.这将选择列中具有非数字字符的所有行。

For details check this page .有关详细信息,请查看此页面

OR this one或者这个

select * from <YOUR_TABLE>
where LENGTH(REPLACE(TRANSLATE(<YOUR_TABLE.your_column_name>,
                               ’0123456789′, ‘@@@@@@@@@@’), ‘@’, NULL)) > 0;

While not perfect (doesn't account for characters like '#', '@', etc.) a quick and dirty solution is:虽然不完美(不考虑像 '#'、'@' 等字符)一个快速而肮脏的解决方案是:

SELECT * FROM <YOUR_TABLE>
WHERE UPPER(<YOUR_TABLE.your_column_name>) = LOWER(<YOUR_TABLE.your_column_name>) 

you could use Translate and filter out the values which have non numeric characters and then order on the columns.您可以使用 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        

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM