oracle有数据类型测试的函数吗

Tod707070 2010-11-27 12:16:38
我有一个数据表tab1,大概100万条记录。里面有一个字段(field1)是varchar2类型的,但是其实里面存储的是数字格式的字符。
我执行“select * from tab1 where to_number(field1)>=100000”的时候经常会报“数据不是合法数字类型”的错误。
但是我不知道具体出错的记录是哪个。
oracle里面有没有哪个函数可以对字符是否能够转换为数字(或者日期)进行判断呢?
...全文
141 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tod707070 2011-03-12
  • 打赏
  • 举报
回复
置顶再问一下,最好不要用异常,我的数据库很大,支持不了那么多异常发生。
Tod707070 2011-01-02
  • 打赏
  • 举报
回复
回九楼,我的问题就是说那个字段是varchar2(40),但是里面存储的数据大部分是数字形式的字符串,比如说“234.88”,但是有个别信息又不不能被合法翻译成字符串,例如"188,244.00"(里面多了个逗号,还有很多不知道的情况导致字符串不能被正确翻译成数字),因此我执行to_number的时候经常出错。
我现在需要一个函数,能够判断字符串内容是不是合法的数字形式,该如何判断。
minitoy 2010-11-29
  • 打赏
  • 举报
回复
数据有几种格式?
gelyon 2010-11-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 tod707070 的回复:]
我有一个数据表tab1,大概100万条记录。里面有一个字段(field1)是varchar2类型的,但是其实里面存储的是数字格式的字符。
我执行“select * from tab1 where to_number(field1)>=100000”的时候经常会报“数据不是合法数字类型”的错误。
但是我不知道具体出错的记录是哪个。
oracle里面有没有哪个函数可以对字符是否能够转换为数字(或……
[/Quote]
不知道楼主你所说的字段(field1)是varchar2类型,存储的是数字,是否是全部都是数字的字符???从你描述来看 ,你的SQL语句不会有问题的,但是出现了“数据不是合法数字类型”只能说明你字段field1中有写数据不是数字,你可能要再确定下!
另外,如果字段(field1)是数字字符的话,你SQL语句中where后没必要进行to_number()转换,Oracle在执行查询的时候会隐式转换类型的,也就是直接select * from tab1 where field1>=100000就可以了
hyl04 2010-11-28
  • 打赏
  • 举报
回复
不太明白LZ的意思!
xiaoyaobihai 2010-11-27
  • 打赏
  • 举报
回复
学习~~
iqlife 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yy_mm_dd 的回复:]
写个小函数就行了
create or replace function isNumber(p_value in varchar2)
return pls_integer is
v_to number;

begin
begin
v_to := to_number(p_value);
return(1); -----如果是返回1

exception
……
[/Quote]
兄弟,函数不能这样用。。
应该放在SELECT中用。。
SELECT to_number(p_value) INTO v_to FROM DUAL
YY_MM_DD 2010-11-27
  • 打赏
  • 举报
回复
写个小函数就行了
create or replace function isNumber(p_value in varchar2)
return pls_integer is
v_to number;

begin
begin
v_to := to_number(p_value);
return(1); -----如果是返回1

exception
when others then
return(2);------如果不是返回2
end;

end number_varchar;

select isNumber(field1) from table
tangren 2010-11-27
  • 打赏
  • 举报
回复
select *
from tab1
where translate(field1, '\\0123456789', '\\') is not null;
--10g以上还可以使用正则表达式函数
YY_MM_DD 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 java3344520 的回复:]

引用 2 楼 yy_mm_dd 的回复:
写个小函数就行了
create or replace function isNumber(p_value in varchar2)
return pls_integer is
v_to number;

begin
begin
v_to := to_number(p_value);
return(1); -----如果是返回1

e……
[/Quote]
???没看懂什么意思。。
心中的彩虹 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wkc168 的回复:]
引用楼主 tod707070 的回复:
我有一个数据表tab1,大概100万条记录。里面有一个字段(field1)是varchar2类型的,但是其实里面存储的是数字格式的字符。
我执行“select * from tab1 where to_number(field1)>=100000”的时候经常会报“数据不是合法数字类型”的错误。
但是我不知道具体出错的记录是哪个。
oracle里面有没……
[/Quote]

select * from tab1 where f_number(field1)=0



---1为数字 0不为数字
SQL> edi
已写入 file afiedt.buf

1 create or replace function f_number(p_num varchar2) return number
2 as
3 num number;
4 begin
5 if p_num is null then
6 return null;
7 end if;
8 num:=to_number(p_num);
9 return 1;
10 exception
11 when others then
12 return 0;
13* end;
SQL> /

函数已创建。

SQL> select f_number('122') from dual
2 /

F_NUMBER('122')
---------------
1

SQL> select f_number('12 22') from dual
2 /

F_NUMBER('1222')
----------------
0

SQL> select f_number(null) from dual
2 /

F_NUMBER(NULL)
--------------






心中的彩虹 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 tod707070 的回复:]
我有一个数据表tab1,大概100万条记录。里面有一个字段(field1)是varchar2类型的,但是其实里面存储的是数字格式的字符。
我执行“select * from tab1 where to_number(field1)>=100000”的时候经常会报“数据不是合法数字类型”的错误。
但是我不知道具体出错的记录是哪个。
oracle里面有没有哪个函数可以对字符是否能够转换为数字(或……
[/Quote]

写个函数判断

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧