的Oracle 10.2.0.5如何识别无效(损坏)存储在Oracle DATE列值
什么是识别那些在DATE列“无效”值的表行的最简单方法。这里“无效”是指违反Oracle日期值规则的二进制表示。
我最近有一个存储在列中的日期无效的问题。
我能够使用查询谓词来找到特定问题的一行:
WHERE TO_CHAR(date_expr,'YYYYMMDDHH24MISS') = '00000000000000'
在我的情况下,世纪字节是无效的......
select dump(h.bid_close_date) from mytable h where h.id = 54321
Typ=12 Len=7: 220,111,11,2,1,1,1
的世纪字节应该是100 +两位数的世纪。在这种情况下,又增加了100个,就好像世纪值是“120”,使得年份为“12011”。 (我知道将无效的DATE值存入数据库的唯一方法是使用OCI,使用本地7字节DATE表示法。)
在这种情况下,TO_CHAR函数返回一个可识别的字符串,可用于识别不稳定的DATE值。
我的问题:是否有一个更一般或更简单的方法(最好使用SQL SELECT语句)来标识DATE列中具有“无效”值的行。
您可以选择不在指定有效范围内的所有日期吗? – ProfessionalAmateur 2012-01-04 23:39:51
*在早期版本的Oracle(9.x?)中存在一个错误,它允许INTERVAL值的零除未被检测到并产生无效值。 – 2012-01-06 12:59:26
你是如何设法将它们放入数据库的? – 2012-05-18 08:31:13