我只能在查询中使用特定的基础值(YYYYMMDD)。
我想插入带有时间戳的数据,但只是替换为该日期
INSERT INTO table (field1, field2, regTs)
VALUES (:field1, :field2, systimestamp);
从这个查询中,我如何应用:basedate + systimestamp 的小时、分钟、秒、微秒
我只能在查询中使用特定的基础值(YYYYMMDD)。
我想插入带有时间戳的数据,但只是替换为该日期
INSERT INTO table (field1, field2, regTs)
VALUES (:field1, :field2, systimestamp);
从这个查询中,我如何应用:basedate + systimestamp 的小时、分钟、秒、微秒
如果您知道 :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')
首先使用 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')
希望这可以帮助。