繁体   English   中英

在Oracle中如何从日期中提取年份并将其转换为数字?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM