Re: Numeric value in VARCHAR?
Date: 1997/11/18
Message-ID: <879869939.483_at_dejanews.com>#1/1
In article <64qjl4$98n$1_at_mark.ucdavis.edu>,
rswhitaker_at_ucdavis.edu (Robert Whitaker) wrote:
> Can anyone tell me of a way to interrogate a column that is a
> VARCHAR2 datatype to determine if the value can be converted to a
> number? Visual Basic has a nice function IsNumber(arg). Can't
> something similar be done with SQL?
> -RSW
I have included a PLL Library routine below that I've been using
for a long time. I see that I wrote it before I knew about For
Loops.
You might also use to_number in a block as follows. (I haven't tested this):
function Numeric(tst_item varchar2) return boolean is
tmp number;
Begin
tmp := to_number(tst_item);
return true;
Exception
return false;
End;
Steve Cosner
http://members.aol.com/stevec5088
FUNCTION PLL_NUMERIC
-----------------------------------------------------------------------* -- PLL_NUMERIC is a function to test whether a field is numeric or not. -- It returns TRUE if the item is numeric, and false if not. It only -- allows numeric digits. Plus, minus, comma and decimal are not -- allowed. -- It can be used several ways: -- 1. With one parameter--the item to test. For example: -- IF PLL_NUMERIC(:BLK.ITEM) THEN MESSAGE('ITS NUMERIC'); -- 2. With 2 parameters--the item to test, and its length. You -- only need to pass the length parameter if the item MUST be -- a specific length, and it is possible that the item to test -- may not be the mandatory length. If you don't pass the length -- then this process checks all characters in the item. -- Example: IF PLL_NUMERIC(:BLK.ITEM,4) THEN -- Message('The item is exactly 4 numeric characters'); -- 3. With 4 parameters: #3 and #4 are the low and high value range -- which is valid for the number. If you do not pass these -- parameters, the range test is not done. Examples: -- IF PLL_NUMERIC(TMP_VAR,NULL,0,100) THEN...--Any length is ok, -- but value must be between 0 and 100 -- IF PLL_NUMERIC(TMP_VAR,4,1000,1999) THEN...--Must be 4 digits
-- -----------------------------------------------------------------------* (TST_ITEM VARCHAR2, LENGTH_I NUMBER DEFAULT NULL, LO_VAL NUMBER DEFAULT NULL, HI_VAL NUMBER DEFAULT NULL) RETURN BOOLEAN IS LENGTH_TMP NUMBER; I NUMBER; TRU_FALSE BOOLEAN := FALSE; BEGIN I := LENGTH(TST_ITEM); LENGTH_TMP := NVL(LENGTH_I,I); IF TST_ITEM IS NOT NULL AND I = LENGTH_TMP THEN I := 1; LOOP IF SUBSTR(TST_ITEM,I,1) NOT BETWEEN '0' AND '9' THEN EXIT; END IF; IF I < LENGTH_TMP THEN I := I + 1; ELSE TRU_FALSE := TRUE; EXIT; END IF; END LOOP; END IF; IF TRU_FALSE AND LO_VAL IS NOT NULL AND HI_VAL IS NOT NULL AND TO_NUMBER(TST_ITEM) NOT BETWEEN LO_VAL AND HI_VAL THEN TRU_FALSE := FALSE; END IF; RETURN TRU_FALSE; END; -------------------==== Posted via Deja News ====----------------------- http://www.dejanews.com/ Search, Read, Post to UsenetReceived on Tue Nov 18 1997 - 00:00:00 CET