Oracle判断是否为数字或数字型字符串(sqlserver isnumeric)


需求:

如果字段值不是数字或者数字型字符串,把该字段值update成'' 

1.函数法(不能批量,舍弃):

[sql]
  1. create   or   replace   function   isNumber(p_in   varchar2)   return   boolean   as   
  2.         i   number;   
  3. begin   
  4.         i:=to_number(p_in);   
  5.         return   true;   
  6. exception         
  7.         when   others   then     
  8.               return   false;   
  9. end   ;   

但是这个好像只能一个个判断,不能批量。

2.

[sql]
  1. SQL> select   nvl2(translate('333''\1234567890 ''\'), 'is   characters ', 'is   number ')   from   dual;  
  2.   
  3. NVL2(TRANSLATE('333','\1234567  
  4. ------------------------------   
  5. is   number  
  6.   
  7. SQL> select   nvl2(translate(333, '\1234567890 ''\'), 'is   characters', 'is   number')   from   dual;  
  8.   
  9. NVL2(TRANSLATE(333,'\123456789  
  10. ------------------------------   
  11. is   number  
  12.   
  13. SQL> select   nvl2(translate('aaaaa''\1234567890 ''\'), 'is   characters', 'is   number')   from   dual;  
  14.   
  15. NVL2(TRANSLATE('AAAAA','\12345  
  16. ------------------------------   
  17. is   characters  
  18.   
  19. SQL>   

3.据说要批量,可以这样先查出来,没有试过:

[sql]
  1. select   decode(nvl2(translate(column'\1234567890 ''\'), '0', '1') ,'1',column,'')  from   dual;  

我写的:

[sql]
  1. Update T_87_Mtbuf Set SpCode='' Where  nvl2(translate(SpCode, '\1234567890 ''\'), 'is   characters', 'is   number ')='is   characters';  

补充一点:

to_number(...)中只能接受数字如122或数字型字符串'122',接受'aaa'会报错“无效字符”。

相关内容