2

在我的另一个线程中,我询问了如何仅提取最近 3 个月的数据。但是,我设法仅从一个表中提取了过去 3 个月的数据,并为其他表提取了所有数据。我的架构中有几个表,时间戳的列名不同。

在我的 par 文件中,我有以下 QUERY 但它不起作用。我收到 ORA-00911 错误消息。我想知道以下查询的语法是否正确/可能。

    QUERY=TABLE1,TABLE2:"where TABLE1_STARTTIME >= TO_DATE('01-AUG-2015','dd-mon-yyyy') and TABLE2_STARTIME >= TO_DATE('01-AUG-2015','dd-mon-yyyy');" 
4

1 回答 1

1

QUERY=TABLE1,TABLE2:"其中 ... TO_DATE('01-AUG-2015','dd-mon-yyyy');"

删除QUERY参数中的分号。:

QUERY=TABLE1,TABLE2:"where TABLE1_STARTTIME >= TO_DATE('01-AUG-2015','dd-mon-yyyy') 
                     and TABLE2_STARTIME >= TO_DATE('01-AUG-2015','dd-mon-yyyy')" 

附带说明:

与您的问题没有直接关系。但请记住TO_DATE依赖于 NLS。您应该指定NLS_DATE_LANGUAGE,否则您的查询可能会因不同的 nls_date_language 而失败。

例如,

SQL> alter session set nls_date_language='FRENCH';

Session altered.

SQL> SELECT TO_DATE('01-AUG-2015','dd-mon-yyyy') FROM DUAL;
SELECT TO_DATE('01-AUG-2015','dd-mon-yyyy') FROM DUAL
               *
ERROR at line 1:
ORA-01843: not a valid month


SQL> SELECT TO_DATE('01-AUG-2015','dd-mon-yyyy', 'nls_date_language=ENGLISH') FROM DUAL;

TO_DATE('01
-----------
01-AO█T -15

当您没有任何时间部分时,我更喜欢使用ANSI 日期文字。它是独立于 NLS的。它使用固定格式YYYY-MM-DD

例如,

SQL> alter session set nls_date_language='FRENCH';

Session altered.

SQL> SELECT DATE '2015-08-01' FROM DUAL;

DATE'2015-0
-----------
01-AO█T -15

SQL> alter session set nls_date_language='AMERICAN';

Session altered.

SQL> SELECT DATE '2015-08-01' FROM DUAL;

DATE'2015
---------
01-AUG-15
于 2015-10-16T05:59:41.633 回答