[英]In Oracle how to extract year from date and convert to number?
我需要从4个不同的字段中提取年份,将值转换为数字,然后将这些值与另一个值进行比较。 我得到的错误是“数据类型不一致:预期NUMBER日期为DATE”。 显然,我将年份更改为数字的尝试无效。 我的错误在哪里?
select pc.a00_pnum
,pc.a06_edition
,pu.c26_year_built
,TO_NUMBER(EXTRACT(year FROM pu.C38_UPDT_HEAT)) "yr_ht_updtd"
,TO_NUMBER(EXTRACT(year FROM pu.C35_UPDT_PLUMB)) "yr_plumb_updtd"
,TO_NUMBER(EXTRACT(year FROM pu.C34_UPDT_WIRE)) "yr_wire_updtd"
,TO_NUMBER(EXTRACT(year FROM pu.C22_UPDT_ROOF)) "yr_roof_updtd"
from tfprpt.pcommon pc
join tfprpt.punit pu
on pc.a00_pnum = pu.a00_pnum
and pc.a06_edition = pu.a06_edition
where pc.a06_edition = (select max(pc2.a06_edition) from tfprpt.pcommon pc2 where pc2.a00_pnum = pc.a00_pnum) and
pc.a09_xdate >= '11-May-18' and
pc.d14_status = 'I' and
(
pu.c26_year_built > pu.C38_UPDT_HEAT or
pu.c26_year_built > pu.C35_UPDT_PLUMB or
pu.c26_year_built > pu.C34_UPDT_WIRE or
pu.c26_year_built > pu.C22_UPDT_ROOF
);
extract()
产生一个数字,因此您可以简化:
TO_NUMBER(EXTRACT(year FROM pu.C38_UPDT_HEAT)) "yr_ht_updtd"
至:
EXTRACT(year FROM pu.C38_UPDT_HEAT) as "yr_ht_updtd"
我不知道pu.c26_year_built
是什么数据类型。 如果是数字,请重复提取:
pu.c26_year_built > extract(year from pu.C38_UPDT_HEAT) or
pu.c26_year_built > extract(year from pu.C35_UPDT_PLUMB) or
pu.c26_year_built > extract(year from pu.C34_UPDT_WIRE) or
pu.c26_year_built > extract(year from pu.C22_UPDT_ROOF)
使用提取来更改select语句中显示的内容与您在where子句中添加的内容不同。 您只需要在where子句中做同样的事情。
select pc.a00_pnum
,pc.a06_edition
,pu.c26_year_built
,TO_NUMBER(EXTRACT(year FROM pu.C38_UPDT_HEAT)) "yr_ht_updtd"
,TO_NUMBER(EXTRACT(year FROM pu.C35_UPDT_PLUMB)) "yr_plumb_updtd"
,TO_NUMBER(EXTRACT(year FROM pu.C34_UPDT_WIRE)) "yr_wire_updtd"
,TO_NUMBER(EXTRACT(year FROM pu.C22_UPDT_ROOF)) "yr_roof_updtd"
from tfprpt.pcommon pc
join tfprpt.punit pu
on pc.a00_pnum = pu.a00_pnum
and pc.a06_edition = pu.a06_edition
where pc.a06_edition = (select max(pc2.a06_edition) from tfprpt.pcommon pc2 where pc2.a00_pnum = pc.a00_pnum) and
pc.a09_xdate >= '11-May-18' and
pc.d14_status = 'I' and
(
pu.c26_year_built > TO_NUMBER(EXTRACT(year FROM pu.C38_UPDT_HEAT)) or
pu.c26_year_built > TO_NUMBER(EXTRACT(year FROM pu.C35_UPDT_PLUMB)) or
pu.c26_year_built > TO_NUMBER(EXTRACT(year FROM pu.C34_UPDT_WIRE)) or
pu.c26_year_built > TO_NUMBER(EXTRACT(year FROM pu.C22_UPDT_ROOF))
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.