【问题标题】:How can i pass variable with in single quote oracle sql如何在单引号 oracle sql 中传递变量
【发布时间】:2021-11-14 19:03:42
【问题描述】:
select
to_char(sysdate + interval '2' hour,'hh12:mi AM') as Time
from dual

我有一个查询将从当前系统时间增加 2 小时,但它可能会增加 aur 减去时间,而且小时的值也将是动态的 所以我必须使用运算符值它可能是 + 或 - 并且类似地小时值它可能是 2 ,3 ,4 或 5 所以我的查询将是

select
to_char(sysdate :operator interval ':hourvalue' hour,'hh12:mi AM') as Time
from dual

它给了我错误

ORA-00907: 缺少右括号

请帮帮我,我正在使用 oracle 11g

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您可以使用NUMTODSINTERVAL(n, 'hour'),其中 n 也可以为负值。 例如

      SELECT NUMTODSINTERVAL((-1)*10, 'hour') h FROM DUAL;
    

    您还可以创建一个间隔 -(1 小时 37 分 41 秒):

      SELECT NUMTODSINTERVAL((-1) * (1*3600 + 37*60 + 41), 'second') hms FROM DUAL;
      
    

    注意,n 是一个数字(十进制),所以这也可以:

      SELECT NUMTODSINTERVAL((-1) * (1 + 37/60 + 41/3600), 'hour') hms FROM DUAL;
    

    【讨论】:

    • 非常感谢,进一步指导我了解上述所有情况,我们可以增加 2:30 或 3:45 等时间,请帮助
    • @abdulraheemdev ,请参阅编辑后的答案。
    【解决方案2】:

    你不能有一个可变数量的INTERVAL 文字;但是,您可以拥有一个固定的 INTERVAL 文字,然后将其乘以绑定变量:

    SELECT TO_CHAR(
             SYSDATE + :hourvalue * INTERVAL '1' HOUR,
             'hh12:mi AM'
           ) AS TIME
    FROM   DUAL
    

    如果您想要一个负数,那么只需指定一个负数 :hourvalue 而不是使用单独的 :operator 绑定变量。

    【讨论】:

    • 非常感谢,进一步指导我了解上述所有情况,我们可以增加 2:30 或 3:45 等时间,请帮助
    【解决方案3】:

    只能使用绑定变量作为参数,不能使用运算符作为绑定变量。一种解决方法是将间隔乘以 -1(负数)和 1(正数)。

    SELECT 
      TO_CHAR(
        SYSDATE + numtodsinterval((CASE WHEN :operator = '-' THEN -1 ELSE 1 END * :interval),'hour'),
        'hh12:mi AM'
        ) as time
    FROM DUAL;
    

    【讨论】:

    • 非常感谢,进一步指导我了解上述所有情况,我们可以增加 2:30 或 3:45 等时间,请帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2020-02-03
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多