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%'))
答
两个小错误:
-
你把计算列
- 支架
- 失踪在
ROUND
DAY_REQUESTED
背后的
FROM
末最后,你可以使用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
谢谢你的帮助,很感激。我试图使用该代码,并且出现“无效字符”错误。这个的任何想法?我没有看到任何错误,除了列名是“DATE_REQUESTED”,而不是“E_DATREQUESTED”。 – 2013-04-12 13:51:08
检查这一个http://sqlfiddle.com/#!4/d0346/3/0 – Trinimon 2013-04-12 16:51:03