【问题标题】:assign value from another table column to the current select query将另一个表列中的值分配给当前选择查询
【发布时间】:2017-07-11 11:45:53
【问题描述】:

我正在编写以下查询以获取每小时间隔的记录

SELECT *
FROM gw_lob_store
WHERE created_ts<(round(((sysdate-interval '30' MINUTE) - to_date('19700101 000000', 'YYYYMMDD HH24MISS'))*86400));

在上面的查询中,我想从另一个表列(下面的查询)获取并分配它,请告诉我该怎么做

select prop_value
from gw_prop_config
where prop_name='lobStoreJobTime'

prop_value 的值为我要分配的值“30”

注意:这两个表没有任何匹配的列。

【问题讨论】:

    标签: sql database oracle date unix-timestamp


    【解决方案1】:

    我认为您不能将 INTERVAL 表达式中的文字“30”替换为变量。

    但是,由于 SYSDATE 是 DATE 而不是 TIMESTAMP,sysdate-interval '30' MINUTE 等同于 sysdate-30/60/24,因此您可以重写为:

    SELECT *
    FROM gw_lob_store
    WHERE created_ts < round(((sysdate-(select to_number(prop_value)/60/24
                                          from gw_prop_config
                                         where prop_name='lobStoreJobTime'
                                       )
                              ) - date '1970-01-01'
                             )*86400
                            )
    

    【讨论】:

    • prop_value 可能是一个字符串(因为这样的配置列通常是)所以通常的防御性数据类型转换可能是一个好主意。
    【解决方案2】:

    主要有两种选择:

    1) 30 分钟间隔等于 30 个一分钟间隔:

    sysdate - (interval '1' minute * prop_value)
    

    2) 根据数字计算分钟数:

    sysdate - numtodsinterval(prop_value, 'minute')
    

    【讨论】:

      猜你喜欢
      • 2018-05-21
      • 2022-11-28
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 2016-03-08
      相关资源
      最近更新 更多