我有一个表,其中有一个日期列,表示从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;
- 00000 -“FROM关键字未在预期位置找到”
你知道吗?
2条答案
按热度按时间mm5n2pyu1#
尝试使用
numToDSInterval
函数:ttygqcqt2#
但是当我试着用柱子的时候它不起作用
正如文档中所示,interval字面量只是像
interval '18544320' minute
这样的字面量值。您不能使用列或变量,因为根据定义,它们不再是 literal 值。正如文档中所述:
如果日期数据为数值形式,则可以使用NUMTOYMINTERVAL或NUMTODSINTERVAL转换函数将数值数据转换为间隔值。
正如@Selvazi所展示的那样。
你也可以乘以一个固定的时间间隔来得到你想要的结果:
选择日期'1988-01-01'
有趣的是,函数和相乘的字面量之间可能会有明显的性能差异,但这可能取决于您的版本和其他事情,并且可能对您的数据量并不重要。可能值得比较两者,看看是否一个比另一个更适合您。
我还使用了一个日期文字,它比使用
to_date()
要短,并且表示该日期的午夜。即使您使用to_date()
,您也可以通过删除时间部分来缩短代码,因为这些部分仍然默认为午夜。你知道如何表示小时吗?-小时列显示510 -这是从00:00开始的分钟-小时应该是上午8:30
您似乎是在一列中存储从1988-01-01历元到某个日期的午夜之间的天数,然后在另一列中存储该日期的时间-两者都存储为分钟数。
您可以对这两列使用相同的计算方法,并在乘以一分钟的间隔之前或之后将它们相加:
fiddle