我的问题是: 对于每个会议,如果会议在2012年7月1日之前举行,则显示会议标题和单词“第一学期”,如果会议在2012年7月1日或之后举行,则显示单词“第二学期”。对于包含“第一学期”或“第二学期”字样的专栏,请填写标题术语。 与之关联的表是
CONFID TITLE LOCATION SDATE
------ -------------------- -------------------- ---------
c00001 Hydroinformatics Singapore 15-JUN-12
c00002 Ecological_modeling Berlin 15-JUL-12
c00003 Computational_M London 25-MAY-12
c00004 Ecoinformatics Boston 22-AUG-12
c00005 Uncertainty_analysis Athens 10-OCT-12
c00006 Large_databases Toronto 13-APR-12
c00007 Systems_analysis Boston 23-MAR-12
c00008 Systems_integration Tokyo 24-FEB-12
c00009 Aquatic_biology Helsinki 12-MAY-12
c00010 Information_systems Paris 08-JAN-12
c00011 Simulation_modeling Rome 01-SEP-12
c00012 DSS Melbourne 18-DEC-12
我写的sql语句是:
select C.Title, 'First term' as "Term"
from Conference_C C
where C.ConfID in (select C.Sdate
from Conference_C C
where C.Sdate < '1-July-12')
union
select C.Title, 'Second term' as "Term"
from Conference_C C
where C.ConfID in (select C.Sdate
from Conference_C C
where C.Sdate >= '1-July-12');
我收到以下错误:
select C.Title, 'First term' as "Term" from Conference_C C where C.ConfID
*
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected
请澄清我哪里出错,任何帮助将不胜感激。 谢谢
答案 0 :(得分:2)
您正在将ConfID
(一个数字)与从内部查询返回的Sdate
(日期)进行比较:
where C.ConfID in (select C.Sdate
from Conference_C C
where C.Sdate < '1-July-12')
你需要的只是一个简单的SQL:
select C.Title, 'First term' as "Term"
from Conference_C C
where C.Sdate < '1-July-12'
union
select C.Title, 'Second term' as "Term"
from Conference_C C
where C.Sdate >= '1-July-12'
此外,由于union
的两个部分是互斥的,因此可以使用union all
(性能更好,因为它不需要消除重复)