Oracle 11g,约ROUND

问题描述:

我对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%')) 

两个小错误:

    你把计算列 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