辛辛苦苦寫了運算式,結果,才發現使用者寫入的資料居然有非數值時,真的會讓人昏倒。
使用Translate() 符合條件會回傳null:
ex :
LENGTH(TRIM(TRANSLATE('123b', ' +-.0123456789',' '))); return 1
LENGTH(TRIM(TRANSLATE('a123b', ' +-.0123456789',' '))); return 2
LENGTH(TRIM(TRANSLATE('1256.54', ' +-.0123456789',' '))); return null
LENGTH(TRIM(TRANSLATE ('-56', ' +-.0123456789',' '))); return null
或是自行建立一個 isNumeric() :
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;
參考來源:[Oracle] PL/SQL 判斷是否為數字 (Is Numberic)
沒有留言:
張貼留言