Sybase 有自带的系统函数 isnumeric 来判断1个字符是否能转换成数字。

而Oracle没有这个函数,所以在sql语句使用to_number函数时有时候会因为数据问题导致系统出错。

解决方案有几个,

一, 新建1个自定义函数, 利用to_number,  能转换成to_number的就返回真, 转换出错的就返回假。
CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
   RETURN NUMBER
IS
   v_str FLOAT;
BEGIN
   IF str IS NULL
   THEN
      RETURN 0;
   ELSE
      BEGIN
         SELECT TO_NUMBER (str)
           INTO v_str
           FROM DUAL;
      EXCEPTION
         WHEN INVALID_NUMBER
         THEN
            RETURN 0;
      END;

RETURN 1;
   END IF;
END isnumeric;

二,这种方法不用新增自定义系统函数,利用translate函数,只需要加在where条件里。
例如下面这个sql语句
 select t.instance
   from sys.v$thread  t,
           sys.v$parameter  v
   where v.name = 'thread'
   and (v.value = '0' or
             t.thread# = to_number(v.value))

因为高亮字句的原因,v.value中存在不能转成数字的字符数据,所以是会报错的。

而加入下面这些判断后,

 select t.instance    from sys.v$thread  t,           sys.v$parameter  v   where v.name = 'thread'   and translate(v.value,'a1234567890.-','a') is null  --必须由数字和"."和"-"组成   and translate(v.value,'1.-','1') is not null        --去掉"."和"-"后至少1个字符,也就是至少有1个数字啦   and length(v.value) - length(replace(v.value,'.','')) < 2 --"."的个数必须少于2   and (instr(v.value,'-',0)= 0 or (                         --没有"-"                                     --或者只有1个"-"字符,而且用"-"开头                                    (length(v.value) - length(replace(v.value,'-','')) = 1)                                     and  substr(v.value,1,1) ='-'))   and (v.value = '0' or              t.thread# = to_number(v.value))

就不会报错了,因为在执行to_number之前已经把不符合要求的数据筛掉。
执行了上面的条件后, 其实还有类似“-.6",".1" 这样的数据保留,其实无所谓,因为to_number是可以无错执行的。
关于translate函数可以参考:http://nvd11.blog.163.com/blog/static/2000183122012112605432545/

Oracle 判断字符串是否能转成数字。相关推荐

  1. python判断字母数字_Python判断字符串是否为字母或者数字(浮点数)的多种方法

    str为字符串s为字符串 str.isalnum() 所有字符都是数字或者字母 str.isalpha() 所有字符都是字母 str.isdigit() 所有字符都是数字 str.isspace() ...

  2. c语言c判断字符数字,c语言问题求教 利用函数判断字符串中是否全为数字

    c语言问题求教 利用函数判断字符串中是否全为数字 答案:4  信息版本:手机版 解决时间 2018-12-22 19:42 已解决 2018-12-22 08:52 c语言问题求教 利用函数判断字符串 ...

  3. 判断字符串是否是字母开头数字结尾,拆分字符串中的字母和数字。

    1. 拆分字符串中的字母和数字 splitString(str) {let letter = str.match(/^[a-z|A-Z]+/g)[0];let number = str.match(/ ...

  4. pyhton如何判断字符串中是否只含有数字——isdigit函数的用法及实例

    目录 1.isdigit函数的语法及用法 (1)语法:isdigit() (2)用法:用于判断字符串中是否只含有数字.数字只能为0和正数,不能为负数. 2.实例 (1)简单的用法 (2)与if条件函数 ...

  5. Python判断字符串是否为字母或者数字

    str_1 = "123" str_2 = "Abc" str_3 = "123Abc" 用isdigit函数判断是否数字 print(st ...

  6. python面试题(5)--- 检测 字符串 是否可以转换成 数字

    1.检测字符串是否由数字组成否为数字 代码演示: s1 = '1234564' print('1234564是数字:',s1.isdigit()) #检测字符串是否由数字组成print(int(s1) ...

  7. python3 判断字符串是否包含中英文和数字

    import redef check_contain_chinese(check_str):"""判断字符串中是否含有中文字符"""for ...

  8. js判断字符串的括号是否成对出现

    给定一个字符串里面可能包含"()"."{}"."[]"三种括号,请使用JavaScript实现一个函数,检查字符串的括号是否成对出现. 思路 ...

  9. php判断小数点的长度_PHP 判断字符串是否为整数、数字、不含小数点

    PHP 用正则表达式判断字符串是否为整数,若字符串未定义.未赋值.或者带有小数点验证均会提示不是整数 $Number="1"; if(preg_match("/^-?\d ...

最新文章

  1. 每一个科学家的内心都住着一位哲学家(节选)
  2. 微信小程序lottiejs动画事例代码
  3. java cloneable 用途_java中cloneable的使用
  4. 防火墙(11)——防止爬虫过多访问(ping)我们的服务器
  5. [BZOJ1260][CQOI2007]涂色paint 区间dp
  6. sun服务器dt消息不能被启动,Sun ONE Application Server 错误
  7. 电脑显示屏亮度怎么调_金合光电丨深圳led显示屏厂家为您诠释行业专业术语
  8. 在排序数组中查找数字
  9. 关于idea maven ojdbc6.jar 报错问题
  10. DDE实现动态数据交换
  11. html怎么把字做成动画效果,用纯CSS实现文字的动态效果
  12. 整流十五—网侧低频电流谐波抑制方法及其稳定性分析
  13. AtCoder Beginner Contest 168 C~D题解
  14. 零代码变更,巧用 Reloader 快速实现 Kubernetes 的 Configmap 和 Secret 热更新
  15. IDEA java类文件左下角出现橙红色的圆形小标识
  16. 简易公交车查询系统c语言,公交线路免费api接口代码
  17. 浙大PTA-Python题库 编程题第一章(1-1~1-3)题解
  18. 【BYM】Android 实现相机快门动画
  19. Hbase(二)hbase建表
  20. 7个优秀「开放式」前端面试题分享!附答案

热门文章

  1. React的组件中的传值,及context上下文的使用
  2. buu [GKCTF2020]小学生的密码学
  3. python的异常处理机制
  4. shell编程之特殊变量
  5. GO语言实现RSA 加密和解密的实现
  6. win7网站服务器空间怎么清理,win7如何清理c盘空间_win7磁盘空间不足怎么清理
  7. (61)分析 KiFindReadyThread 函数 —— 线程优先级
  8. 【prometheus】alertmanager 配置文件示例
  9. 让对方ping不通你的主机
  10. Xshell的安装和连接