to_date如果先对字符串判断是否是日期

ACMAIN_CHM 2009-04-20 04:46:57
在语句中对一列字符串提取其实日期部分,然后to_date成日期格式。但由于人工输入的时有些不太规范,无法正确转成日期,有什么方法可以预先判断一下字符内容是否是有效的日期?

SQL> select DATUM,to_date(substr(EREIGNIS,10,instr(EREIGNIS,'-',1,4)-10),'yyyy-mm-dd-hh24:mi'),
.....
ERROR:
ORA-01858: a non-numeric character was found where a numeric was expected

检查了一下,此刻的内容是非 'yyyy-mm-dd-hh24:mi', 输入的时候不规范造成的。是否能跳过继续执行SQL语句。
...全文
203 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
大川101 2009-04-20
  • 打赏
  • 举报
回复
还有 可以使用js啊,在页面不需输入,只要选择就行了,而且一定是正确的格式。
阿三 2009-04-20
  • 打赏
  • 举报
回复
学习了
多壮志 2009-04-20
  • 打赏
  • 举报
回复
两个途径.
1)用过程处理
2)用正则表达式先过滤下,再处理
zcs_1 2009-04-20
  • 打赏
  • 举报
回复
创建一个函数check_date,输入参数为字符串,如果字符串符合'yyyy-mm-dd-hh24:mi'的日期格式,返回日期,否则返回空
CREATE OR REPLACE FUNCTION check_date(p_str VARCHAR2) RETURN NUMBER AS
v_date DATE;
BEGIN
SELECT to_date(p_str,'yyyy-mm-dd-hh24:mi')
INTO v_date
FROM DUAL;
RETURN v_date;
EXCEPTION WHEN OTHERS THEN
RETURN NULL;
END;
/

SELECT check_date(colk) FROM yourtab;
bw555 2009-04-20
  • 打赏
  • 举报
回复
不行就再服务器上建立一个函数,把非法的替换成空
superhsj 2009-04-20
  • 打赏
  • 举报
回复
这个暂时还没想到,一段一段去解析?估计挺麻烦的
[Quote=引用 2 楼 ACMAIN_CHM 的回复:]
没说明白。

本来这名是打算
insert into newTable(mydate)
select to_date(colk,'yyyy-mm-dd-hh24:mi') from oldtable

如果避免这种错误停止?能否有下面这种方式来实现?

insert into newTable(mydate)
select to_date(colk,'yyyy-mm-dd-hh24:mi') from oldtable
where ????
[/Quote]
ACMAIN_CHM 2009-04-20
  • 打赏
  • 举报
回复

没说明白。

本来这名是打算
insert into newTable(mydate)
select to_date(colk,'yyyy-mm-dd-hh24:mi') from oldtable

如果避免这种错误停止?能否有下面这种方式来实现?

insert into newTable(mydate)
select to_date(colk,'yyyy-mm-dd-hh24:mi') from oldtable
where ????
superhsj 2009-04-20
  • 打赏
  • 举报
回复
用异常捕获,非法的执行null

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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