【问题标题】:Oracle - bad date value in DATE columnOracle - DATE 列中的错误日期值
【发布时间】:2020-11-03 22:44:39
【问题描述】:

我遇到了奇怪的情况,当 Oracle 不允许我按 DATE 值选择行时,数据库中有。

有一些表带有TRANS_DATE 列(DATE 数据类型)。

我正在尝试将数据从该 Oracle 导入 MS Sql Server,但导入失败并显示“DATE 列的值错误”。

经过一番调查,我发现源表中有一个奇怪的值'0002-11-30'

SELECT a
FROM (
SELECT DISTINCT  trunc(TRANS_DATE) a
FROM OWS.DOC
)
ORDER BY a asc

好的,我尝试按该值从 Oracle 中选择行,但出现错误:

SELECT *
FROM OWS.DOC
WHERE TRANS_DATE='0002-11-30 00:00:00'

错误:

SQL Error [1847] [22008]: ORA-01847: day of month must be between 1 and  last day of month

我也已经尝试过这个选择:

SELECT *
FROM OWS.DOC
WHERE TRANS_DATE=to_date('0002-11-30', 'yyyy-mon-dd')

它返回一个错误

SQL Error [1843] [22008]: ORA-01843: not a valid month

我应该如何构造 PL-SQL 查询来选择这些数据?

【问题讨论】:

    标签: oracle


    【解决方案1】:
    SELECT *
    FROM OWS.DOC
    WHERE TRANS_DATE=to_date('0002-11-30', 'yyyy-mm-dd')
    

    或者

    SELECT *
    FROM OWS.DOC
    WHERE TRANS_DATE=date'0002-11-30'
    

    【讨论】:

      【解决方案2】:

      'yyyy-mon-dd'的'mon'是月份的字符缩写,试试这样的

      select to_date('0002-Nov-30', 'yyyy-mon-dd') from dual

      【讨论】:

        【解决方案3】:

        你说:

        WHERE TRANS_DATE=to_date('0002-11-30', 'yyyy-mon-dd')
        

        它返回一个错误

        SQL Error [1843] [22008]: ORA-01843: not a valid month
        

        看看你做了什么:

        to_date('0002-11-30' , 'yyyy-mon-dd')
        

        0002-11-30 在你看来真的像 YYYY-MON-DD 吗?对我来说不是,而且——显然——对甲骨文也不是。 MON 代表(英文)JANFEBMAR、...DEC。因此,将格式掩码与值匹配:

        to_date('0002-11-30', 'yyyy-mm-dd')
        

        【讨论】:

          【解决方案4】:

          根据您的查询,我假设 TRANS_DATE 列的数据类型为 DATE。因此,您的查询不正确。

          SELECT * FROM OWS.DOC WHERE TRANS_DATE='0002-11-30 00:00:00';

          在此选择中,您将字符串数据类型与日期数据类型进行比较。

          SELECT * FROM OWS.DOC WHERE TRANS_DATE=to_date('0002-11-30', 'yyyy-mon-dd');

          在这种情况下,您使用的是“mon”而不是“mm”,其中“mon”是您提供的数字的 3 个字母的文本表示月份。但是解决这个问题很可能会导致找不到数据,因为在第一个查询中您正在截断日期,因此您必须这样做。

          应该这样做:

          SELECT * FROM OWS.DOC WHERE trunc(TRANS_DATE) = to_date('0002-11-30', 'yyyy-mm-dd');
          

          例如 SQL 小提琴:http://sqlfiddle.com/#!4/00272/1

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-27
            • 1970-01-01
            • 2021-08-13
            • 2014-06-30
            • 2017-02-16
            相关资源
            最近更新 更多