我只能在查询中使用特定的basedate值(YYYYMMDD)。
我想插入带有时间戳的数据,但只是替换为该日期
INSERT INTO table (field1, field2, regTs)
VALUES (:field1, :field2, systimestamp);在这个查询中,我如何应用:basedate +systimestamp的小时、分钟、秒、微秒
发布于 2017-07-08 18:21:54
首先使用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-11 05:15:46
如果您知道:basedate对于给定的用户体验(任务的执行)是常量,那么您的第一步应该是计算sysdate和:basedate之间的间隔。执行此命令一次,找出问题并在以后最大限度地减少CPU消耗:
select numtodsinterval(sysdate - :basedate, 'DAY') dsinterval
from dual;然后,您可以将insert语句文本中的systimestamp替换为:
systimestamp - :dsinterval如果:basedate更改非常频繁,那么您必须将更多的代码放入表达式中,如下所示:
systimestamp - numtodsinterval(sysdate - :basedate, 'DAY')显然,在上面的示例中,:basedate的数据类型是date。如果它是字符串数据类型,那么如果日期字符串是根据NLS_DATE_FORMAT的当前设置格式化的,则必须这样引用它:
to_date(:basedate)或者这取决于日期字符串的格式:
to_date(:basedate, 'some date format string')https://stackoverflow.com/questions/44982816
复制相似问题