2013-04-11 125 views
0

我對SQL比較陌生。我試圖編寫一個查詢,其中「date_requested」列將四捨五入到最近的一天,並將結果放入一個新列。我知道代碼並不是最漂亮的,但它可以在另一份報告中完成工作。我添加了ROUND函數的代碼,但是我不斷收到錯誤:「ORA-0933:SQL命令未正確結束」。Oracle 11g,約ROUND

SELECT "RIT"."RIT_REQUEST_V".* 
FROM "RIT"."RIT_REQUEST_V" 
ROUND(to_date(''DATE_REQUESTED'') "DAY_REQUESTED" 
WHERE (("FORM_ID" = 2011) 
OR ("FORM_ID" = 2014) 
OR ("FORM_ID" = 5007) 
OR ("FORM_ID" = 5036) 
OR ("FORM_ID" = 5039) 
OR ("FORM_ID" = 7007) 
OR ("FORM_ID" = 10000) 
OR ("FORM_ID" = 10001) 
OR ("FORM_ID" = 10005) 
OR ("FORM_ID" = 10007) 
OR ("FORM_ID" = 10011) 
OR ("FORM_ID" = 10020) 
OR ("FORM_ID" = 10024) 
OR ("FORM_ID" = 10025) 
OR ("FORM_ID" = 10029) 
OR ("FORM_ID" = 10032) 
OR ("FORM_ID" = 10033) 
OR ("FORM_ID" = 10034) 
OR ("FORM_ID" = 10035) 
OR ("FORM_ID" = 10036) 
OR ("FORM_ID" = 10037) 
OR ("FORM_ID" = 11011) 
OR ("FORM_ID" = 11013) 
OR ("FORM_ID" = 11999) 
OR ("FORM_ID" = 36001)) 
AND (("STATUS" LIKE 'OPEN%') 
OR ("STATUS" LIKE 'Open%')) 

回答

1

兩個小錯誤:

    你把計算列 DAY_REQUESTED背後的 FROM
  1. 支架
  2. 失蹤在ROUND

末最後,你可以使用IN代替很多OR的。這使代碼更易於維護:

SELECT "RIT"."RIT_REQUEST_V".*, 
     ROUND(to_date(E_DATREQUESTED)) "DAY_REQUESTED" 
    FROM "RIT"."RIT_REQUEST_V" 
WHERE FORM_ID IN (2011,2014,5007,5036,5039,7007,10000, 
        10001,10005,10007,10011,10020,10024, 
        10025,10029,10032,10033,10034,10035, 
        10036,10037,11011,11013,11999,36001) 
    AND (("STATUS" LIKE 'OPEN%') OR 
     ("STATUS" LIKE 'Open%')); 

ps.s.修復了一個小的錯字FORM_ID IN

+0

謝謝你的幫助,很感激。我試圖使用該代碼,並且出現「無效字符」錯誤。這個的任何想法?我沒有看到任何錯誤,除了列名是「DATE_REQUESTED」,而不是「E_DATREQUESTED」。 – 2013-04-12 13:51:08

+0

檢查這一個http://sqlfiddle.com/#!4/d0346/3/0 – Trinimon 2013-04-12 16:51:03