在Oracle中使用"Interval",其中"Interval"是表中的值

 干杯平凡小点_113 发布于 2023-01-19 13:22

我需要使用以下数据列在Oracle DB中生成值列表:

ITEM_TYPE             VARCHAR2(20)
ITEM_LAST_UPDATED     DATE
ITEM_UPDATE_TOLERANCE NUMBER(1)

应该发送到控制台的唯一数据是日期'ITEM_LAST_UPDATED'小于sysdate的项减去其中的整数值'ITEM_UPDATE_TOLERANCE'.

所以,如果我想展示过去一小时的那些,我可以这样做:

select ITEM_TYPE from MY_TABLE
where
to_char(ITEM_LAST_UPDATED, 'DD-MON-YYYY HH24:MI')
<=
to_char(sysdate - interval '1' hour, 'DD-MON-YYYY HH24:MI');

但是,我不需要在上面的语句中使用'1',而是需要用数值替换它ITEM_UPDATE_TOLERANCE.

我尝试了几个不同的版本,但所有错误(如):

select ITEM_TYPE from MY_TABLE
where
to_char(ITEM_LAST_UPDATED, 'DD-MON-YYYY HH24:MI')
<=
to_char(sysdate - interval to_number(ITEM_UPDATE_TOLERANCE) hour, 'DD-MON-YYYY HH24:MI');

a_horse_with.. 8

为什么要将完美DATE列转换为字符值,只是为了将其DATE转换为字符列的另一个值进行比较.

只需使用:

ITEM_LAST_UPDATED <= sysdate - interval '1' hour

要实现您想要的,只需乘以该值:

ITEM_LAST_UPDATED <= sysdate - (interval '1' hour) * ITEM_UPDATE_TOLERANCE

使用该to_number()功能也绝对不需要将数字转换为数字.

2 个回答
  • 为什么要将完美DATE列转换为字符值,只是为了将其DATE转换为字符列的另一个值进行比较.

    只需使用:

    ITEM_LAST_UPDATED <= sysdate - interval '1' hour
    

    要实现您想要的,只需乘以该值:

    ITEM_LAST_UPDATED <= sysdate - (interval '1' hour) * ITEM_UPDATE_TOLERANCE
    

    使用该to_number()功能也绝对不需要将数字转换为数字.

    2023-01-19 13:24 回答
  • 作为@ a_horse_with_no_name的间隔乘法技巧或San的除法方法的替代,您还可以使用以下numtodsinterval()函数:

    ITEM_LAST_UPDATED <= sysdate - numtodsinterval(ITEM_UPDATE_TOLERANCE, 'HOUR')
    

    举个例子:

    select sysdate, sysdate - numtodsinterval(3, 'HOUR') from dual;
    
    SYSDATE             SYSDATE-NUMTODSINTE
    ------------------- -------------------
    2014-03-07 19:08:27 2014-03-07 16:08:27
    

    2023-01-19 13:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有