将天/小时/分钟和月份添加到时间戳

有没有办法将天数小时数月和分钟添加到时间戳中,我想将其值插入到变量中

我有想要添加到时间戳的分钟、小时、天和月的单独变量

时间戳格式是这样的“04-FEB-21 10.25.12.013000 AM”

我尝试使用 SELECT TO_TIMESTAMP(datecreated,'dd-mon-yyyy hh.mi.ss AM') + daysvar into duedate FROM dual; 但它返回错误 AM/AM 或 PM/PM required

daysvar 包含要添加到时间戳的天数

谢谢!

回答

我有想要添加到时间戳的分钟、小时、天和月的单独变量

使用NUMTODSINTERVAL

DECLARE
  datecreated VARCHAR2(30) := '04-FEB-21 10.25.12.013000 AM';
  days    INT := 1;
  hours   INT := 2;
  minutes INT := 42;
  seconds INT := 3;
  duedate VARCHAR2(30);
BEGIN
  duedate := TO_CHAR(
               TO_TIMESTAMP(
                 datecreated,
                 'DD-MON-RR HH12.MI.SS.FF6 AM',
                 'NLS_DATE_LANGUAGE=American'
               )
               + NUMTODSINTERVAL(days,    'DAY')
               + NUMTODSINTERVAL(hours,   'HOUR')
               + NUMTODSINTERVAL(minutes, 'MINUTE')
               + NUMTODSINTERVAL(seconds, 'SECOND'),
               'DD-MON-RR HH12.MI.SS.FF6 AM',
               'NLS_DATE_LANGUAGE=American'
             );
  DBMS_OUTPUT.PUT_LINE(duedate);
END;
/
DECLARE
  datecreated VARCHAR2(30) := '04-FEB-21 10.25.12.013000 AM';
  days    INT := 1;
  hours   INT := 2;
  minutes INT := 42;
  seconds INT := 3;
  duedate VARCHAR2(30);
BEGIN
  duedate := TO_CHAR(
               TO_TIMESTAMP(
                 datecreated,
                 'DD-MON-RR HH12.MI.SS.FF6 AM',
                 'NLS_DATE_LANGUAGE=American'
               )
               + NUMTODSINTERVAL(days,    'DAY')
               + NUMTODSINTERVAL(hours,   'HOUR')
               + NUMTODSINTERVAL(minutes, 'MINUTE')
               + NUMTODSINTERVAL(seconds, 'SECOND'),
               'DD-MON-RR HH12.MI.SS.FF6 AM',
               'NLS_DATE_LANGUAGE=American'
             );
  DBMS_OUTPUT.PUT_LINE(duedate);
END;
/

db<>在这里摆弄


如果要添加月份,请使用ADD_MONTHS; 但是,它返回 a DATE(而不是 a TIMESTAMP),因此您将丢失小数秒。不过,您可以将它们添加回来:

db<>在这里摆弄


以上是将天/小时/分钟和月份添加到时间戳的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>