以下是查询和查询附带的代码。我无法弄清楚如何在问题中使用日期2006年12月31日。
对于每个出租物业,列出地址,包括街道,城市,州。 还将出租类型和天数列出为“列出的天数”。按租赁类型递增的订购结果,列出的天数递减。 与其使用今天的日期来确定列出的日期,不如使用2006年12月31日
问题在于Im对此查询没有收到任何结果。我相信我在where语句中做错了。我不确定如何为日期分配值。
select rp_street, rp_city, rp_state, rp_type, (rp_datelisted - sysdate) as "Number of Days Listed"
from rentproperty
where sysdate = '31-dec-2006'
order by rp_type asc, "Number of Days Listed" desc;
答案 0 :(得分:2)
使用日期时,然后使用日期,而不是字符串。 '31-dec-2006'
只是一个字符串。它看起来像日期(对我们来说,对人类而言),Oracle会尝试将其转换为日期(如果可以),但是您永远无法确定它是否会起作用。例如,它在我的数据库中不起作用:
SQL> select count(*) From emp where hiredate < '31-dec-2006';
select count(*) From emp where hiredate < '31-dec-2006'
*
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected
如果我修复了几件事,它将起作用:
SQL> alter session set nls_date_language = english;
Session altered.
SQL> alter session set nls_date_format = 'dd-mon-yyyy';
Session altered.
SQL> select count(*) From emp where hiredate < '31-dec-2006';
COUNT(*)
----------
14
SQL>
因此,要么使用日期文字(总是看起来像date 'yyyy-mm-dd'
),要么将TO_DATE
函数应用于带有适当格式掩码的字符串,例如to_date('31.12.2006', 'dd.mm.yyyy')
,您的查询将始终有效。
这是您可以做的(我缩短了列列表); RENTPROPERTY
CTE列出了一些示例数据;您需要从第7行开始的代码。
SQL> with rentproperty (rp_street, rp_type, rp_datelisted) as
2 (select 'Oak street' , 'Type A', date '2000-01-25' from dual union all
3 select '31st street', 'Type B', date '2001-10-30' from dual union all
4 select 'Elm street' , 'Type B', date '2004-08-25' from dual union all
5 select 'Bee street' , 'Type A', date '2006-11-30' from dual
6 )
7 select rp_street,
8 rp_type,
9 (date '2006-12-31' - rp_datelisted) days_listed
10 from rentproperty
11 where rp_datelisted < date '2006-12-31'
12 order by rp_type asc, days_listed desc;
RP_STREET RP_TYP DAYS_LISTED
----------- ------ -----------
Oak street Type A 2532
Bee street Type A 31
31st street Type B 1888
Elm street Type B 858
SQL>
答案 1 :(得分:1)
在oracle中,sysdate是当前日期,因此,除非今天是2006年12月31日,否则您将永远不会获得任何结果。如果您使用“ sysdate”作为列名,请尝试将其用引号引起来。
答案 2 :(得分:0)
sysdate ='2006年12月31日'条件为假,这就是为什么没有输出的原因!
这可能是您需要的:
select rp_street, rp_city, rp_state, rp_type, (rp_datelisted - sysdate) as "Number of
Days Listed"
from rentproperty
where rp_datelisted= '31-dec-2006'
order by rp_type asc, "Number of Days Listed" desc;
答案 3 :(得分:-1)
Oracle sysdate返回日期和时间。尝试使用trunc(sysdate)比较相似的值。
select rp_street, rp_city, rp_state, rp_type, (rp_datelisted - sysdate) as "Number of Days Listed"
from rentproperty
where trunc(sysdate) = '31-dec-2006'
order by rp_type asc, "Number of Days Listed" desc;