Oracle 中 isnumeric 的三种实现

1. 利用 to_number

CREATEORREPLACEFUNCTIONisnumeric (strINVARCHAR2)
RETURNNUMBER
IS
   v_str FLOAT;
BEGIN
IFstrISNULL
THEN
RETURN0;
ELSE
BEGIN
SELECT TO_NUMBER (str)
INTO v_str
FROM DUAL;
      EXCEPTION
WHEN INVALID_NUMBER
THEN
RETURN0;
END;
RETURN1;
ENDIF;
ENDisnumeric;

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; 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT开发技术与工作效率

MySQL #{驼峰字段} for MyBatis

572
来自专栏Hadoop数据仓库

Oracle sql loader 导数据时添加序号的三种方法

1.用触发器和序列实现 CREATE SEQUENCE u.seq_questionno START WITH 0 MAXVALUE 9999999999999...

1677
来自专栏Hadoop数据仓库

Oracle sqlldr 如何导入一个日期列

1. LOAD DATA INFILE * INTO TABLE test FIELDS TERMINATED BY X'9' TRAILING NULLCO...

1736
来自专栏Java成神之路

Oracle学习笔记_06_CASE WHEN 用法介绍

貌似只有Oracle提供该函数,而且不支持ANSI SQL,语法上也没CASE WHEN清晰,个人不推荐使用。

411
来自专栏问天丶天问

Mysql 中英文排序

1374
来自专栏Hadoop数据仓库

一个用 Oracle 函数索引进行优化的例子

表中有500万条记录,原来没有索引: set timing on set autotrace traceonly SQL> select count(*), ...

1856
来自专栏IT开发技术与工作效率

MySQL查询表位置和列注释等

1022
来自专栏文渊之博

如果正确读取SQL Server中的扩展事件?

    SQL Server中使用扩展事件捕捉所需的信息后,可以选择存放的位置。比如说内存或文件中,但无论存在哪里,其本质都是一个大XML。因此在SQL Ser...

1769
来自专栏数据分析

[数据库基础]——快速浏览日期时间转换

阅读导航 数据库日期和时间类型 相互转换     time ⇌ date time ⇌ smalldatetime time ⇌ datetime tim...

2646
来自专栏DT乱“码”

Oracle CASE WHEN的一些使用

1. CASE WHEN 表达式有两种形式 复制代码代码如下: --简单Case函数   CASE sex   WHEN '1' THEN '男'   ...

1945

扫码关注云+社区