Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据另一个表中的值从日期列中减去分钟_Sql_Oracle - Fatal编程技术网

Sql 根据另一个表中的值从日期列中减去分钟

Sql 根据另一个表中的值从日期列中减去分钟,sql,oracle,Sql,Oracle,我试图根据另一个表中的值从日期列中减去分钟。但这个查询正在出错。有人能对此提出建议吗 TABLE 1 NAME - MYTABLE1 COLUMN NAME "IN_DATE" Data type - DATE TABLE 2 NAME - CONFIG_TABLE COLUMN NAME - PARAM_NAME VALUE = SUBTRACT_MINUTE_VALUE COLUMN NAME PARAM_VALUE VALUE =15 SELECT IN_DATE , IN_

我试图根据另一个表中的值从日期列中减去分钟。但这个查询正在出错。有人能对此提出建议吗

TABLE 1 NAME - MYTABLE1 

COLUMN NAME "IN_DATE" Data type - DATE

TABLE 2
NAME - CONFIG_TABLE
COLUMN NAME - PARAM_NAME VALUE = SUBTRACT_MINUTE_VALUE
COLUMN NAME   PARAM_VALUE  VALUE =15

SELECT IN_DATE , IN_DATE - interval (SELECT PARAM_VALUE FROM CONFIG_TABLE WHERE PARAM_NAME='SUBTRACT_MINUTE_VALUE') minute FROM MYTABLE1

我是这样做的:用分钟数减去分钟数除以(24小时(一天)x 60分钟(一小时))

[根据Aleksej的ANSI连接建议以及NUMTODSINTERVAL选项进行编辑]

SQL> select m.in_date,
  2         m.in_date - c.subtract_minute_value / (24 * 60) result
  3  from mytable1 m join config c on 1 = 1;

IN_DATE          RESULT
---------------- ----------------
02.02.2018 07:51 02.02.2018 07:36

SQL>
SQL> select m.in_date,
  2         m.in_date - numtodsinterval(c.subtract_minute_value, 'minute') result
  3  from mytable1 m join config c on 1 = 1;

IN_DATE          RESULT
---------------- ----------------
02.02.2018 07:51 02.02.2018 07:36

SQL>
你也可以试试这个

ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY HH:MI:SS AM';

SELECT SYSDATE current_time, 
       SYSDATE - (1/24/60)*:p_min current_time_minus_mins
  FROM DUAL;

另一种选择是使用一分钟的
间隔
,并将其与存储在配置表中的数字相乘

select m.in_date,
       m.in_date - (interval '1' minute * c.param_value) as result
from mytable1 m 
  cross join config_table c on c.param_name = 'SUBTRACT_MINUTE_VALUE'

最好用ANSI SQL显示解决方案,避免使用旧的Oraclestyle@Aleksej,你说的是加入吗?如果是这样的话,好吧,谢谢,我添加了这个选项,还有另一个NUMTODSINTERVAL方法来获得结果。如果没有,嗯,那怎么办?不过,“旧的”Oracle样式有什么问题?在本例中,它实际上是一个简单的样式,而ANSI看起来。。。更糟:)加入,没有其他:)好吧,修复!我钦佩并追随你的热情,你在不到两个月的时间里超过了我:)祝贺你!
TO_CHAR()
?以“MM/DD/YYYY HH:MI:SS AM”格式显示日期的原因是什么。如果我输入SYSDATE,它将只以DD-MON-YYYY格式显示(在我这里)。然后您应该更改会话
NLS\u DATE\u格式
设置
间隔“1”分钟*c.param\u值
现在这很聪明!
select m.in_date,
       m.in_date - (interval '1' minute * c.param_value) as result
from mytable1 m 
  cross join config_table c on c.param_name = 'SUBTRACT_MINUTE_VALUE'