表:id stdate jg enddate
1 2010-9-1 6
2 2010-1-4 2 2010-3-4
3 2010-1-3 不计算
4 2010-7-2 赞不用 我有一个字段 jg ,可能存放的数字,也可能写的汉字
我想做一个函数实现如果jg是数字就实现 enddate= stdate+jg
如果jg不是数字 就让enddate 留空
请问 怎么实现?
1 2010-9-1 6
2 2010-1-4 2 2010-3-4
3 2010-1-3 不计算
4 2010-7-2 赞不用 我有一个字段 jg ,可能存放的数字,也可能写的汉字
我想做一个函数实现如果jg是数字就实现 enddate= stdate+jg
如果jg不是数字 就让enddate 留空
请问 怎么实现?
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;