繁体   English   中英

蟾蜍上的 Oracle SQL 无效编号

[英]Oracle SQL invalid number on toad

我已经做了这个查询,但是当我执行它时,我收到了关于“无效数字”的错误。 但是在 SQL Developer for Oracle 中,没有错误; 我得到了我想要的结果,但在 Toad 中我得到了 'Invalid Number' 。

DECLARE v_rep number;

BEGIN
   EXECUTE IMMEDIATE
     'SELECT to_number(REPLACE(max(substr(to_char(r_timestamp_arr,''HH24:MI''),1,2) ||
        ltrim(to_char(round(to_number(Substr(to_char(r_timestamp_arr, ''HH24:MI''),4,2)) /
        60,2),''.00''))), ''.'', '',''))  -
        to_number(REPLACE(MIN(substr(to_char(r_timestamp_arr,''HH24:MI''),1,2) ||
        ltrim(to_char(round(to_number(Substr(to_char(r_timestamp_arr, ''HH24:MI''),4,2)) / 
        60,2),''.00''))), ''.'', '','')) 
     FROM TV_MAX
     WHERE TV_UID = ''7a87e8e4861a4d0aae65da1a7248b256''' 
     INTO v_rep;
     END ;

您不需要EXECUTE IMMEDIATE也不需要使用字符串:

甲骨文设置

CREATE TABLE tv_max ( tv_uid, r_timestamp_arr ) AS
SELECT '7a87e8e4861a4d0aae65da1a7248b256', DATE '2019-12-27' + INTERVAL '00:00' HOUR TO MINUTE FROM DUAL UNION ALL
SELECT '7a87e8e4861a4d0aae65da1a7248b256', DATE '2019-12-27' + INTERVAL '01:30' HOUR TO MINUTE FROM DUAL;

查询 1

如果要忽略日期和时间的日期部分:

DECLARE
  v_rep NUMBER;
BEGIN
  SELECT ( MAX( r_timestamp_arr - TRUNC( r_timestamp_arr ) )
         - MIN( r_timestamp_arr - TRUNC( r_timestamp_arr ) )
         ) * 24
  INTO   v_rep
  FROM   tv_max
  WHERE  TV_UID = '7a87e8e4861a4d0aae65da1a7248b256';

  DBMS_OUTPUT.PUT_LINE( v_rep );
END;
/

查询 2

如果您想要关于日期组件的最小值/最大值,那么查询可以更简单:

DECLARE
  v_rep NUMBER;
BEGIN
  SELECT ( MAX( r_timestamp_arr ) - MIN( r_timestamp_arr ) ) * 24
  INTO   v_rep
  FROM   tv_max
  WHERE  TV_UID = '7a87e8e4861a4d0aae65da1a7248b256';

  DBMS_OUTPUT.PUT_LINE( v_rep );
END;
/

输出

对于测试数据,两个输出:

\n 1.5\n

db<> 在这里摆弄

看起来您想知道最大和最小小时(包括分钟,不包括秒)之间的区别,日期部分被截断。 因此,截断时间,减去日期,您将得到以天为单位的结果,乘以 24,结果将以小时为单位。 查询不依赖于 NLS 设置:

select 24 * (to_date(max(to_char(r_timestamp_arr, 'hh24:mi')), 'hh24:mi') 
           - to_date(min(to_char(r_timestamp_arr, 'hh24:mi')), 'hh24:mi')) as diff
  from tv_max
  where tv_uid = '7a87e8e4861a4d0aae65da1a7248b256'

数据库小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM