1

我在这里创建了一个更容易测试的帖子:ORA-01847 day of month must be between 1 and last day of month - but data is OK 那里描述的问题解决方案

我花了几个小时在网上搜索类似的问题 - 最后我认为只有你在那里可以帮助我。

我通过 SQL 开发人员将我的查询发送到 Oracle 11。

您可以忽略完整的子选择(它在 pastebin 中) - 我添加了每列的转储以查看详细信息。

在比较 where 子句中的时间戳时遇到了大问题:这是我的基本 sql,最后一行没有 where 子句:

select prod,operating,fakeday,prod_origin,operating_origin,
dump(prod),dump(fakeday),dump(operating) from 
(
http://pastebin.com/wqX7dJPA
) sub
-- works: where sub.operating < to_timestamp('20140101','YYYYMMDD')
-- works: where sub.fakeday < to_timestamp('20140101','YYYYMMDD')
-- works NOT: where sub.prod < to_timestamp('20140101','YYYYMMDD')

没有 where 子句的结果是:

    'PROD'|                    'OPERATING'|                'FAKEDAY'|                  'PROD_ORIGIN'|'OPERATING_ORIGIN'|'DUMP(PROD)'|                                          'DUMP(FAKEDAY)'|                                              'DUMP(OPERATING)'
    25.11.13 00:00:00,000000000|25.11.13 00:00:00,000000000|25.11.13 00:00:00,000000000|',20131125,'|'25.11.2013'|      'Typ=187 Len=20: 7,221,11,25,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,221,11,25,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,221,11,25,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'
    24.02.14 00:00:00,000000000|24.02.14 00:00:00,000000000|24.02.14 00:00:00,000000000|',20140224,'|'24.02.2014'|      'Typ=187 Len=20: 7,222,2,24,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,222,2,24,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,222,2,24,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'
    28.10.13 00:00:00,000000000|28.10.13 00:00:00,000000000|28.10.13 00:00:00,000000000|',20131028,'|'28.10.2013'|      'Typ=187 Len=20: 7,221,10,28,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,221,10,28,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,221,10,28,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'
    28.10.13 00:00:00,000000000|28.10.13 00:00:00,000000000|28.10.13 00:00:00,000000000|',20131028,'|'28.10.2013'|      'Typ=187 Len=20: 7,221,10,28,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,221,10,28,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,221,10,28,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'
    20.01.14 00:00:00,000000000|20.01.14 00:00:00,000000000|20.01.14 00:00:00,000000000|',20140120,'|'20.01.2014'|      'Typ=187 Len=20: 7,222,1,20,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,222,1,20,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'|'Typ=187 Len=20: 7,222,1,20,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0'

如果我在“prod”的最后一行过滤中添加 where 子句,我会遇到

ORA-01830: Datumsformatstruktur endet vor Umwandlung der gesamten Eingabezeichenfolge
01830. 00000 -  "date format picture ends before converting entire input string"
*Cause:    
*Action:

如果我使用另一列 sub.operating 或 sub.fakeday 我将收到正确的过滤结果列表。

where sub.operating < to_timestamp('20140101','YYYYMMDD')

另一个重要信息 - 我可以打电话

select prod,operating,prod-operating,fakeday

它会起作用->显示prod-operating的间隔结果

where prod - operating = INTERVAL '0' DAY;

将导致:

 ORA-01847: Tag des Monats muss zwischen 1 und letztem Tag des Monats liegen
 01847. 00000 -  "day of month must be between 1 and last day of month"

请帮忙 - 我不知道。

4

1 回答 1

0

更改会话集 nls_date_format = 'DD.MM.YYYY HH24:MI:SS';

于 2016-06-02T12:57:31.993 回答