如何在where子句中识别除数字之外还有其他数据的数据?
答案 0 :(得分:14)
SELECT *
FROM <table>
WHERE REGEXP_LIKE(<column>, '[^[:digit:]]');
希望它有所帮助...
答案 1 :(得分:5)
您也可以使用TRANSLATE函数执行此操作,如下所示:
SELECT *
FROM A_TABLE a
WHERE LENGTH(TRANSLATE(a.FIELD, 'x0123456789', 'x')) IS NOT NULL
如果字段仅包含数字字符,则表达式LENGTH(TRANSLATE(a.FIELD, 'x0123456789', 'x'))
将返回NULL。如果存在非数字字符,则返回非数字字符数。
分享并享受。
答案 2 :(得分:2)
或者这个
select * from <YOUR_TABLE>
where LENGTH(REPLACE(TRANSLATE(<YOUR_TABLE.your_column_name>,
’0123456789′, ‘@@@@@@@@@@’), ‘@’, NULL)) > 0;
答案 3 :(得分:2)
试试这个
SELECT *
FROM table
WHERE regexp_like(column_name,'[^0-9]+');`
这将选择列中包含非数字字符的所有行。
有关详细信息,请查看此page。
答案 4 :(得分:1)
虽然不完美(不考虑'#','@'等字符),但快速而肮脏的解决方案是:
SELECT * FROM <YOUR_TABLE>
WHERE UPPER(<YOUR_TABLE.your_column_name>) = LOWER(<YOUR_TABLE.your_column_name>)
答案 5 :(得分: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