Oracle11g Oracle错误与_DATE函数有关?

Oracle11g Oracle错误与_DATE函数有关?,oracle11g,Oracle11g,我在VARCHAR2字段中存储了一些月/年数据,格式为MM/YYYY。 当我试图将其转换为一个日期,以便与WHERE子句中的其他日期进行比较时,我得到“ORA-01841:(完整)年份必须介于-4713和+9999之间,而不是0”错误 我检查了空值,没有空值。我用min和max函数检查了两个字符的月份,它们返回min='01'和max='12'。我检查了分隔符-没有位置3不是“/”的行。字段的长度始终为7。最后,使用年份位置的4个字符,我确定min='2010'和max='3020'。我还检查了

我在VARCHAR2字段中存储了一些月/年数据,格式为MM/YYYY。 当我试图将其转换为一个日期,以便与WHERE子句中的其他日期进行比较时,我得到“ORA-01841:(完整)年份必须介于-4713和+9999之间,而不是0”错误

我检查了空值,没有空值。我用min和max函数检查了两个字符的月份,它们返回min='01'和max='12'。我检查了分隔符-没有位置3不是“/”的行。字段的长度始终为7。最后,使用年份位置的4个字符,我确定min='2010'和max='3020'。我还检查了一年中每个字符的<'0'和>'9',没有返回行。当我在WHERE子句中运行SQL而不使用TOU date,但将其保留为select列时,它不会抛出错误

在这种情况下,如何定位坏数据?我被难住了

字段空检查(在where子句中):

字段检查的长度(在where子句中):

月份检查(作为选择列)

分隔符检查(在where子句中)

年度检查(作为选择列)


发现我的问题-我的WHERE子句的其他部分将我的焦点缩小到具有良好数据的行。但是,对于WHERE子句中哪些项的顺序是先计算、后计算等没有保证,因此我必须查看表中“field”的所有数据。你不能只注释掉给你带来麻烦的WHERE子句。我发现一些行的字段为'0/0',这是我的数据问题的根本原因。

1)是否将格式字符串传递给
to\u DATE
?2) 编写一些代码,一次测试一个值,并捕获ORA-01841,打印导致问题的值。您可以发布用于检查数月、第三个字符等的代码吗。?您所采取的方法是正确的,如果查询也是正确的,那么您应该已经捕获了错误的数据。让我们看看这些查询。你是如何转换的?我开始怀疑它是否在做数学2015/10,然后尝试将201.5转换为一个日期…如果你想找到错误的数据并得到每个无效字符串的确切问题,你可以使用一个按顺序计算的CASE表达式。如果你需要帮助,一定要告诉我。
and field is null ; result is 0 rows
and length(field) != 7 ; result is 0 rows
min(substr(field, 1, 2)) ; result is '01' (string)
max(substr(field, 1, 2)) ; result is '12' (string)
and substr(field, 3, 1) != '/'    ; result is 0 rows
min(substr(field, 4, 4)) ; result is '2010' (string)
max(substr(field, 4, 4)) ; result is '3020' (string)