暂无图片
oracle :用to_number函数将日期转为数字,报无效数字,日期类型为varchar2,有什么办法可以解决?
我来答
分享
暂无图片 匿名用户
oracle :用to_number函数将日期转为数字,报无效数字,日期类型为varchar2,有什么办法可以解决?

oracle:用to_number函数将日期转为数字,报无效数字,日期类型为varchar2,有什么办法可以解决?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
JiekeXu
暂无图片
SQL> create table test.test1 (itime varchar2(30));

Table created.

SQL> insert into test.test1 values('20220113');

1 row created.

SQL> commit;

Commit complete.

SQL> select itime from test.test1;

ITIME
------------------------------
20220113

SQL> select to_number(itime) from test.test1;

TO_NUMBER(ITIME)
----------------
        20220113

需要注意的是,被转换的字符串必须符合数值类型格式,如果被转换的字符串不符合数值型格式,Oracle 将抛出错误提示

SQL> insert into test.test1 values('20220113 13:08:00');

1 row created.

SQL> commit;

Commit complete.

SQL> select itime from test.test1;

ITIME
------------------------------
20220113
20220113 13:08:00

SQL> select to_number(itime) from test.test1;
ERROR:
ORA-01722: invalid number


no rows selected

这样不符合的字符就会报无效的数字。无过多研究,仅供参考!

暂无图片 评论
暂无图片 有用 0
暂无图片
严少安
暂无图片

不能直接转,可以先将日期用to_date转成日期格式,再按您的格式要求转成对应的形式

暂无图片 评论
暂无图片 有用 0
DarkAthena

你这是字符串转数字而已,当然要遵从字符串转数字的规则,如果字符串里不是数值当然会报错。
你先把你的日期字符串格式内容发出来,再来看怎么转换

暂无图片 评论
暂无图片 有用 0
Thomas

如果版本是12.2以后,可以用validate_conversion函数,该函数语法如下:

validate_conversion(表达式或字段 as number), 如果可以正常转换,函数返回1,否则返回0。

例如要对T表的a字段进行转换,可以这样写:select to_number(a) from t where validate_conversion(a as number)=1; 这样无法转换的记录便被屏蔽了。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏