ORA-00905:无法将Mysql语法转换为oracle语法

时间:2013-08-26 07:00:28

标签: sql oracle

我有一个mysql代码,需要转换它的Oracle语法,我遇到了这个错误。有谁可以帮助我?

SELECT SUM(T.SEND_UNREAD_DRAFT) SEND_UNREAD_DRAFT, SUM(T.SEND_READ_DRAFT) SEND_READ_DRAFT, 
  SUM(T.SEND_APPROVED) SEND_APPROVED, SUM(T.SEND_COMPLETED) SEND_COMPLETED, 
    SUM(T.SEND_FAILED)SEND_FAILED,SUM(T.RECEIVED_DRAFT)RECEIVED_DRAFT,SUM(T.RECEIVED_APPROVED)RECEIVED_APPROVED, 
            Sum(T.Received_Accepted_Send)Received_Accepted_Send,Sum(T.Received_Rejected_Send)Received_Rejected_Send, Sum(T.Send_Canceled)Send_Canceled 
        FROM 
                 (SELECT 
            (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'DRAFT' THEN (CASE WHEN READ_FLAG = 'N' THEN 1 ELSE 0 END) ELSE 0 END) ELSE 0 END) SEND_UNREAD_DRAFT, 
            (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'DRAFT' THEN (CASE WHEN READ_FLAG = 'Y' THEN 1 ELSE 0 END) ELSE 0 END) ELSE 0 END) SEND_READ_DRAFT, 
            (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'APPROVED' THEN 1 ELSE 0 END) ELSE 0 END) SEND_APPROVED, 
            (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'COMPLETED' THEN 1 ELSE 0 END) ELSE 0 END) SEND_COMPLETED, 
            (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'FAILED' THEN 1 ELSE 0 END) ELSE 0 END) SEND_FAILED, 
            (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'CANCELED' THEN 1 ELSE 0 END) ELSE 0 END) SEND_CANCELED, 
            (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'DRAFT' THEN 1 ELSE 0 END) ELSE 0 END) RECEIVED_DRAFT, 
            (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'APPROVED' THEN 1 ELSE 0 END) ELSE 0 END) RECEIVED_APPROVED, 
            (CASE WHEN TYPE = 'IN' THEN (CASE WHEN STATUS = 'COMPLETED' THEN (CASE WHEN INVOICE_STATUS = 'ACCEPTED' THEN 1 ELSE 0 END) ELSE 0 END) ELSE 0 END) RECEIVED_ACCEPTED_SEND, 
            (CASE WHEN TYPE = 'IN' THEN (CASE WHEN STATUS = 'COMPLETED' THEN (CASE WHEN INVOICE_STATUS = 'REJECTED' THEN 1 ELSE 0 END) ELSE 0 END) ELSE 0 END) RECEIVED_REJECTED_SEND 
               From Eis_Invoice_Header      
                  Where Invoice_Date Between  Sysdate()-365 And (sysdate + Interval '3' Month from dual)) as T

3 个答案:

答案 0 :(得分:1)

  1. 查询select sysdate + interval '3' month , add_months(sysdate, 3) from dual; 是相同的。

  2. 在您的查询中
  3. ,请使用 where invoice_date between sysdate- 365 and sysdate + interval '3' month'

答案 1 :(得分:0)

您必须将interval转换为add_months,将sysdate()转换为sysdate。你也可以改成大小写以简化它。

SELECT SUM(T.SEND_UNREAD_DRAFT) SEND_UNREAD_DRAFT, SUM(T.SEND_READ_DRAFT) SEND_READ_DRAFT, SUM(T.SEND_APPROVED) SEND_APPROVED, SUM(T.SEND_COMPLETED)     SEND_COMPLETED, SUM(T.SEND_FAILED) SEND_FAILED,SUM(T.RECEIVED_DRAFT) RECEIVED_DRAFT,SUM(T.RECEIVED_APPROVED) RECEIVED_APPROVED, Sum(T.Received_Accepted_Send)     Received_Accepted_Send, Sum(T.Received_Rejected_Send) Received_Rejected_Send, Sum(T.Send_Canceled) Send_Canceled 
FROM( 
SELECT CASE WHEN TYPE = 'OUT' and STATUS = 'DRAFT' and READ_FLAG = 'N' THEN 1 ELSE 0 END SEND_UNREAD_DRAFT, CASE WHEN TYPE = 'OUT' and STATUS = 'DRAFT' and     READ_FLAG = 'Y' THEN 1 ELSE 0 END SEND_READ_DRAFT, CASE WHEN TYPE = 'OUT' and STATUS = 'APPROVED' THEN 1 ELSE 0 END SEND_APPROVED, CASE WHEN TYPE = 'OUT' and     STATUS = 'COMPLETED' THEN 1 ELSE 0 END  SEND_COMPLETED, CASE WHEN TYPE = 'OUT' and STATUS = 'FAILED' THEN 1 ELSE 0 END SEND_FAILED, CASE WHEN TYPE = 'OUT' and     STATUS = 'CANCELED' THEN 1 ELSE 0 END SEND_CANCELED, CASE WHEN TYPE = 'OUT' and STATUS = 'DRAFT' THEN 1 ELSE 0 END RECEIVED_DRAFT, CASE WHEN TYPE = 'OUT' and     STATUS = 'APPROVED' THEN 1 ELSE 0 END RECEIVED_APPROVED, CASE WHEN TYPE = 'IN' and STATUS = 'COMPLETED' and INVOICE_STATUS = 'ACCEPTED' THEN 1 ELSE 0 END     RECEIVED_ACCEPTED_SEND, CASE WHEN TYPE = 'IN' and STATUS = 'COMPLETED' and INVOICE_STATUS = 'REJECTED' THEN 1 ELSE 0 END RECEIVED_REJECTED_SEND From     Eis_Invoice_Header Where Invoice_Date Between  Sysdate-365 And add_months(sysdate ,3)
) as T

答案 2 :(得分:0)

尝试以下查询,

SELECT SUM(T.SEND_UNREAD_DRAFT) SEND_UNREAD_DRAFT, 
       SUM(T.SEND_READ_DRAFT) SEND_READ_DRAFT, 
       SUM(T.SEND_APPROVED) SEND_APPROVED, 
       SUM(T.SEND_COMPLETED) SEND_COMPLETED, 
       SUM(T.SEND_FAILED) SEND_FAILED,
       SUM(T.RECEIVED_DRAFT) RECEIVED_DRAFT,
       SUM(T.RECEIVED_APPROVED) RECEIVED_APPROVED, 
       Sum(T.Received_Accepted_Send) Received_Accepted_Send,
       Sum(T.Received_Rejected_Send) Received_Rejected_Send, 
       Sum(T.Send_Canceled) Send_Canceled 
  FROM 
       (SELECT (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'DRAFT' THEN (CASE WHEN READ_FLAG = 'N' THEN 1 ELSE 0 END) ELSE 0 END) ELSE 0 END) SEND_UNREAD_DRAFT, 
               (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'DRAFT' THEN (CASE WHEN READ_FLAG = 'Y' THEN 1 ELSE 0 END) ELSE 0 END) ELSE 0 END) SEND_READ_DRAFT, 
               (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'APPROVED' THEN 1 ELSE 0 END) ELSE 0 END) SEND_APPROVED, 
               (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'COMPLETED' THEN 1 ELSE 0 END) ELSE 0 END) SEND_COMPLETED, 
               (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'FAILED' THEN 1 ELSE 0 END) ELSE 0 END) SEND_FAILED, 
               (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'CANCELED' THEN 1 ELSE 0 END) ELSE 0 END) SEND_CANCELED, 
               (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'DRAFT' THEN 1 ELSE 0 END) ELSE 0 END) RECEIVED_DRAFT, 
               (CASE WHEN TYPE = 'OUT' THEN (CASE WHEN STATUS = 'APPROVED' THEN 1 ELSE 0 END) ELSE 0 END) RECEIVED_APPROVED, 
               (CASE WHEN TYPE = 'IN' THEN (CASE WHEN STATUS = 'COMPLETED' THEN (CASE WHEN INVOICE_STATUS = 'ACCEPTED' THEN 1 ELSE 0 END) ELSE 0 END) ELSE 0 END) RECEIVED_ACCEPTED_SEND, 
               (CASE WHEN TYPE = 'IN' THEN (CASE WHEN STATUS = 'COMPLETED' THEN (CASE WHEN INVOICE_STATUS = 'REJECTED' THEN 1 ELSE 0 END) ELSE 0 END) ELSE 0 END) RECEIVED_REJECTED_SEND 
          From Eis_Invoice_Header   
         WHERE invoice_date BETWEEN add_months(sysdate, -12) --SYSDATE - 365
           AND add_months(sysdate, 3));