我需要在 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/