gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:18:37 31 4
gpt4 key购买 nike

我需要在 Oracle 数据库中生成一个值列表,其中包含以下列数据:

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');

但是,我需要将其替换为 ITEM_UPDATE_TOLERANCE 的数值,而不是在上述语句中使用“1”。

我尝试了几个不同的版本,但是都报错(比如):

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');

最佳答案

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

只需使用:

ITEM_LAST_UPDATED <= sysdate - interval '1' hour

要实现你想要的,只需将值相乘即可:

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

也完全没有必要使用 to_number() 函数将数字转换为数字。

关于sql - 在 Oracle 中使用 "Interval",其中 "Interval"是表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257654/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com