查找日期和小时间隔数据oracle

dgenwo3n  于 2023-04-20  发布在  Oracle
关注(0)|答案(2)|浏览(147)

我有一个表,其中有一个日期列,表示从01-01 -1988开始的分钟,还有一个分钟列
我需要表示真实的数据和小时,例如- date - 18544320 hour 510
我试着输入日期字段-

select to_date('01-01-1988 00:00','dd-mm-yyyy hh24:mi') + interval '18544320' minute(9) 
from dual;

它的工作,但当我尝试它与列本身它不工作:

select to_date('01-01-1988 00:00','dd-mm-yyyy hh24:mi') + interval W.CURDATE minute (9) 
from TABULA.MAC_WORKERASSIGNATIO W;
  1. 00000 -“FROM关键字未在预期位置找到”
    你知道吗?
mm5n2pyu

mm5n2pyu1#

尝试使用numToDSInterval函数:

select to_date('01-01-1988 00:00','dd-mm-yyyy hh24:mi') + numToDSInterval( W.CURDATE, 'minute' )
from TABULA.MAC_WORKERASSIGNATIO W;
ttygqcqt

ttygqcqt2#

但是当我试着用柱子的时候它不起作用
正如文档中所示,interval字面量只是像interval '18544320' minute这样的字面量值。您不能使用列或变量,因为根据定义,它们不再是 literal 值。
正如文档中所述:
如果日期数据为数值形式,则可以使用NUMTOYMINTERVAL或NUMTODSINTERVAL转换函数将数值数据转换为间隔值。
正如@Selvazi所展示的那样。
你也可以乘以一个固定的时间间隔来得到你想要的结果:
选择日期'1988-01-01'

  • W.CURDATE * 从MAC_WORKERASSIGNATIO W开始的间隔'1'分钟;

有趣的是,函数和相乘的字面量之间可能会有明显的性能差异,但这可能取决于您的版本和其他事情,并且可能对您的数据量并不重要。可能值得比较两者,看看是否一个比另一个更适合您。
我还使用了一个日期文字,它比使用to_date()要短,并且表示该日期的午夜。即使您使用to_date(),您也可以通过删除时间部分来缩短代码,因为这些部分仍然默认为午夜。
你知道如何表示小时吗?-小时列显示510 -这是从00:00开始的分钟-小时应该是上午8:30
您似乎是在一列中存储从1988-01-01历元到某个日期的午夜之间的天数,然后在另一列中存储该日期的时间-两者都存储为分钟数。
您可以对这两列使用相同的计算方法,并在乘以一分钟的间隔之前或之后将它们相加:

select date '1988-01-01'
  + W.CURDATE * interval '1' minute
  + W.HOUR * interval '1' minute
from MAC_WORKERASSIGNATIO W;
日期'1988-01- 01'+ W.CURDATE* 间隔'1'分钟+W.HOUR* 间隔'1'分钟
2023-04-05 08:30:00
select date '1988-01-01'
  + (W.CURDATE + W.HOUR) * interval '1' minute
from MAC_WORKERASSIGNATIO W;
日期'1988-01- 01'+(W.CURDATE+W.HOUR)* 间隔'1'分钟
2023-04-05 08:30:00

fiddle

相关问题