接到一个需求要判断一个varchar2字段的值是否是数字,如果不是数字,就置为null,如果是数字,就使用to_number把它变成num类型。
找到两种办法。
方法一:
用trim和translate来判断,这种方法比较麻烦,代码如下:
SELECT
TO_NUMBER(t.ITM_VAL) test
,t.ITM_VAL
from EMR.T_REC t where trim(translate(t.ITM_VAL,'0123456789.',' ')) is NOT NULL
方法二:
使用替换方法,把非数字和小数点的字符变为空,然后使用to_number,代码如下:
SELECT TO_NUMBER(REGEXP_REPLACE(t.ITM_VAL,'[^0-9.]','')) test ,t.ITM_VAL from EMR.T_REC t