Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103113917
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-03-30 23:06:12

来源:赛迪网    作者:李美楠

许多用过asp的朋友对isnumeric函数都有一定的了解,这是一个常用的判断入参是否为数字的函数。而在Oracle中没有现成的判断是否为数字函数,下面我们就来介绍一下如何用三种方法来将其实现:

1. 利用 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;

2. 利用 regexp_like

CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
   RETURN NUMBER
IS
BEGIN
   IF str IS NULL
   THEN
      RETURN 0;
   ELSE
      IF regexp_like (str, '^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$')
      THEN
         RETURN 1;
      ELSE
         RETURN 0;
      END IF;
   END IF;
END isnumeric;

3. 利用 TRANSLATE

CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
   RETURN NUMBER
IS
   v_str VARCHAR2 (1000);
BEGIN
   IF str IS NULL
   THEN
      RETURN 0;
   ELSE
      v_str := TRANSLATE (str, '.0123456789', '.');

      IF v_str = '.' OR v_str = '+.' OR v_str = '-.' OR v_str IS NULL
      THEN
         RETURN 1;
      ELSE
         RETURN 0;
      END IF;
   END IF;
END isnumeric;
阅读(548) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~