SGB*_*SGB 20
我以为你可以使用regexp_like条件并使用正则表达式来查找任何非数字.我希望这可能会有所帮助?!
SELECT * FROM table_with_column_to_search WHERE REGEXP_LIKE(varchar_col_with_non_numerics, '[^0-9]+');
Run Code Online (Sandbox Code Playgroud)
Mic*_*ant 12
要获得指标:
DECODE( TRANSLATE(your_number,' 0123456789',' ')
Run Code Online (Sandbox Code Playgroud)
例如
SQL> select DECODE( TRANSLATE('12345zzz_not_numberee',' 0123456789',' '), NULL, 'number','contains char')
2 from dual
3 /
"contains char"
Run Code Online (Sandbox Code Playgroud)
和
SQL> select DECODE( TRANSLATE('12345',' 0123456789',' '), NULL, 'number','contains char')
2 from dual
3 /
"number"
Run Code Online (Sandbox Code Playgroud)
和
SQL> select DECODE( TRANSLATE('123405',' 0123456789',' '), NULL, 'number','contains char')
2 from dual
3 /
"number"
Run Code Online (Sandbox Code Playgroud)
Oracle 11g具有正则表达式,因此您可以使用它来获取实际数字:
SQL> SELECT colA
2 FROM t1
3 WHERE REGEXP_LIKE(colA, '[[:digit:]]');
COL1
----------
47845
48543
12
...
Run Code Online (Sandbox Code Playgroud)
如果有一个非数字值,如'23g',它将被忽略.
与SGB的答案相反,我更喜欢使用正则表达式定义数据的实际格式并否定它.这允许我定义像$ DDD,DDD,DDD.DD这样的值在OPs的简单场景中,它看起来像
SELECT *
FROM table_with_column_to_search
WHERE NOT REGEXP_LIKE(varchar_col_with_non_numerics, '^[0-9]+$');
Run Code Online (Sandbox Code Playgroud)
它找到所有非正整数.如果你也接受negatiuve整数,这是一个简单的改变,只需添加一个可选的前导减号.
SELECT *
FROM table_with_column_to_search
WHERE NOT REGEXP_LIKE(varchar_col_with_non_numerics, '^-?[0-9]+$');
Run Code Online (Sandbox Code Playgroud)
接受浮点数......
SELECT *
FROM table_with_column_to_search
WHERE NOT REGEXP_LIKE(varchar_col_with_non_numerics, '^-?[0-9]+(\.[0-9]+)?$');
Run Code Online (Sandbox Code Playgroud)
任何格式都是如此.基本上,您通常已经具有验证输入数据的格式,因此当您希望找到与该格式不匹配的数据时...否则会更容易否定该格式而不是另一种格式; 如果你想要的不仅仅是正整数,那么在SGB方法的情况下做起来会有点棘手.
| 归档时间: |
|
| 查看次数: |
92466 次 |
| 最近记录: |