0

我只能在查询中使用特定的基础值(YYYYMMDD)。

我想插入带有时间戳的数据,但只是替换为该日期

INSERT INTO table (field1, field2, regTs)
 VALUES (:field1, :field2, systimestamp);

从这个查询中,我如何应用:basedate + systimestamp 的小时、分钟、秒、微秒

4

2 回答 2

0

如果您知道 :basedate 对于给定的用户体验(任务的执行)是恒定的,那么您的第一步应该是计算 sysdate 和 :basedate 之间的间隔。执行一次以找出它并在以后最大限度地减少 CPU 消耗:

select numtodsinterval(sysdate - :basedate, 'DAY') dsinterval
from dual;

然后您可以systimestamp在您的插入语句文本中替换为:

systimestamp - :dsinterval

如果 :basedate 更改非常频繁,那么您必须将更多代码放入表达式中,如下所示:

systimestamp - numtodsinterval(sysdate - :basedate, 'DAY')

显然,在上面的例子中,:basedate 的数据类型是日期。如果它是字符串数据类型,那么如果日期字符串是根据 NLS_DATE_FORMAT 的当前设置格式化的,那么您必须像这样引用它:

to_date(:basedate)

或者这取决于日期字符串的格式:

to_date(:basedate, 'some date format string')
于 2017-07-10T21:15:45.997 回答
0

首先使用 To_Char 将日期转换为字符串,并将时间字符串与日期字符串连接,现在您可以使用 To_Date 函数将日期时间字符串转换为时间戳。

前任:

to_date(to_char(BASEDATE, 'YYYY/MM/DD') || ' ' ||TO_CHAR(sysdate,'HH24:MI:SS.FF'), 'YYYY/MM/DD HH24:MI:SS.FF') 

希望这可以帮助。

于 2017-07-08T10:21:54.090 回答