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

标签 sql oracle date intervals

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

相关文章:

sql - 查询优化以减少多个连接语句

php - 循环逻辑 PHP 出错

sql-server - SQL 选择具有多条记录的最大日期

mysql - SQL 查询显示列中的字符串值

mysql - 使用 LIKE 搜索所有列

sql oracle 使用更新

MYSQL-从两个表连接并显示一列的不同数据

c# - 用c#检查一个表是否存在于oracle sql数据库中

sql - Oracle 跨行散列数据

javascript - 在 Widget、jQuery Datepicker 中将 DateFormat 更改为欧洲(问题!)