首页 新闻 会员 周边 捐助

c# 访问 ORACLE 时 年、月和日参数描述无法表示的 DateTime 急急急 跪求

0
悬赏园豆:30 [已关闭问题] 关闭于 2014-06-28 11:40

异常内容: 年、月和日参数描述无法表示的 DateTime

异常追踪:oracle其中一张表中有1万多条数据,经我后来过滤其中有134条数据 里面的日期格式异常,用c# 链接oracle 进行查询操作时 会报‘ 时 年、月和日参数描述无法表示的 DateTime’。后来我把这个日期格式进行to_char 操作如下图,结果to_char后的结果为‘0000-00-00’ 该表除这134条以外的数据完全正常。查询分析器下数据看不到任何问题,该列类型为 Data 类型。跪求大神救急。小弟分少已经全部奉上,请各路大神帮忙。谢谢 。

流浪2011的主页 流浪2011 | 初学一级 | 园豆:3
提问于:2014-06-20 14:51
< >
分享
所有回答(6)
0

全部按照日期更新一次。

幻天芒 | 园豆:37207 (高人七级) | 2014-06-20 15:05
0

你就一个触发器一个触发器去找呗,和这个表管理的表都去看看,你的查询语句里面有个ishandle = 3

我估计是和这个有关系的表的触发器出问题了

刘宏玺 | 园豆:14020 (专家六级) | 2014-06-20 15:12

恩 好的。非常感谢

支持(0) 反对(0) 流浪2011 | 园豆:3 (初学一级) | 2014-06-20 15:13
0

to_char(sysdate,'YYYY-MM-DD HH12:MI:SS') 试试这个

leerh | 园豆:207 (菜鸟二级) | 2014-06-20 15:30
0
Launcher | 园豆:45050 (高人七级) | 2014-06-20 16:24
0

select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;  这种方式可以的吧

Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-06-20 17:09
0

处理Oralce中非法的日期值

Oracle中日期列对数据范围有要求,如年份要求为非0,小时要求为非负数,正常情况下,ORACLE是不允许这些数据插入到数据库中存储的。但是一些程序通过一些手段可以向数据库写入这个非法值,已发现的情况有用JAVA程序或Pb程序写入的,通过SQL日期运算也可以写入一些非法日期值。 这些非法日期值一方面是有价值的(比如年月日是对的,只是小时为-1),另一方面,通过ADO.NET是无法直接读取的,甚至转化为字符串也不行,因为一在SQL中使用to_char,转化出来的值就是'0000-00-00'这样的值。 可以使用dump对这些数据分析,如下例子: select startdate,dump(startdate) from sa.zland where substr(to_char(startdate,'yyyy-MM-dd'),1,4)='0000' 1    1992-12-30    Typ=12 Len=7: 119,192,12,30,0,1,1 2    1992-12-30    Typ=12 Len=7: 119,192,12,30,0,1,1 3    1992-12-30    Typ=12 Len=7: 119,192,12,30,0,1,1 4    1992-12-30    Typ=12 Len=7: 119,192,12,30,0,1,1 5    1992-12-30    Typ=12 Len=7: 119,192,12,30,0,1,1 6    1992-12-30    Typ=12 Len=7: 119,192,12,30,0,1,1
而正常数据是: select startdate,dump(startdate) from sa.zland where substr(to_char(startdate,'yyyy-MM-dd'),1,4)<>'0000' 1    1900-1-1    Typ=12 Len=7: 119,100,1,1,1,1,1 2    1900-1-1    Typ=12 Len=7: 119,100,1,1,1,1,1 3    1900-1-1    Typ=12 Len=7: 119,100,1,1,1,1,1 4    1900-1-1    Typ=12 Len=7: 119,100,1,1,1,1,1 5    1900-1-1    Typ=12 Len=7: 119,100,1,1,1,1,1 6    1900-1-1    Typ=12 Len=7: 119,100,1,1,1,1,1
,发现这些数据中,小时字段中储存的数据是有问题的,全为0,按ORACLE的定义,即成了-1小时,因此做to_char转化全成了'0000-00-00'。 做这个分析,可以发现异常日期数据中哪个字段出问题,然后对该字段进行修补即可。上例中,小时字段出问题,因此对小时字段修补: select startdate,dump(startdate+1/24) from sa.zland where substr(to_char(startdate,'yyyy-MM-dd'),1,4)='0000' 全部日期加上1小时,让其为逻辑0点,在正常值范围内。 之后通过to_char转换检查及ado.net读取测试,这些数据全部能正常转换及读取。
流浪2011 | 园豆:3 (初学一级) | 2014-06-28 11:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册