У меня есть 2 кнопки на моей веб-странице. И когда я нажимаю первую кнопку, системное время обновляется в starttime
моей таблицы sql, и когда я останавливаюсь, время окончания должно быть обновлено, а разница между ними должна обновляться в таблице anothere. Я использую следующие запросы.Получение исключения с datetime diff
Чтобы обновить время окончания и обновить общее время.
update breakstable set endtime = ?, TotalBreakTime = (? - StartTime) where userid = ?
and endtime is NULL
здесь первые 2 ?
s относится к нажатию кнопки, что происходит и другой ?
для вошедшего в USERID получать захвачена от сессии.
обновить другую таблицу с суммой totalbreaktime
.
MERGE Time_Tracker as target using (SELECT USERID, CONVERT(NUMERIC(10,2),
SUM(DATEDIFF(Second, '19000101', TotalBreakTime))/60.0) as ColumnWithBreaksCount FROM
BreaksTable where CONVERT(Date, StartTime) = CONVERT(Date, GETDATE()) GROUP BY USERID)
as source ON target.USERID = source.USERID WHEN MATCHED THEN UPDATE
SET BREAKS = source.ColumnWithBreaksCount;"
проблема:
Я начинаю свое время, пойти на перерыв и вернуться через полтора часа, и я нажал на кнопку остановки. Вместо того, чтобы обновлять таблицу, она дает мне следующее исключение.
com.microsoft.sqlserver.jdbc.SQLServerException: Функция DateDiff приводит к переполнению. Число дат, разделяющих , два экземпляра даты/времени слишком велики. Постарайтесь использовать датифик с менее точной датой .
и исключение JDBC (для Java-парней), как показано ниже.
com.microsoft.sqlserver.jdbc.SQLServerException: Функция DateDiff приводит к переполнению. Количество дат, разделяющих два экземпляра даты и времени , слишком велико. Постарайтесь использовать датифик с менее точной датой . на com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError (SQLServerException.java:196) на com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult (SQLServerStatement.java:1454) на com.microsoft.sqlserver. jdbc.SQLServerPreparedStatement.doExecutePreparedStatement (SQLServerPreparedStatement.java:388) на com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement $ PrepStmtExecCmd.doExecute (SQLServerPreparedStatement.java:338) в com.microsoft.sqlserver.jdbc.TDSCommand.execute (IOBuffer.java:4026) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand (SQLServerConnection.java:1416) на com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand (SQLServerStatement.java:185) на com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement (SQLServerStatement.java:160) на com.microsoft.sqlserver. jdbc.SQLServerPreparedStatement.executeUpdate (SQLServerPreparedStatement.java:306) на org.DAO.UpdateEndTimeDAO.UpdateEndTimeDetails (UpdateEndTimeDAO.java:48) на org.servlet.UpdateEndTime.doPost (UpdateEndTime.java:38) при javax.servlet .http.HttpServlet.service (HttpServlet.java:648) в javax.servlet.http.HttpServlet.service (HttpServlet.java:729) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (приложение FilterChain.Java: 291) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на Filter.MyFilter.doFilter (MyFilter. java: 58) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:217) на org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:106) в org.apache.catalina .authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:502) на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:142) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve .java: 79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.java:616) по адресу org.apache.catalina.cor e.StandardEngineValve.invoke (StandardEngineValve.java:88) на org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:518) на org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor. Java: 1091) на org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:673) в org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1500) на org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run (NioEndpoint.java:1456) в java.util.concurrent.ThreadPoolExecutor.runWorker (Unknown Source) в java.util.concurrent.ThreadPoolExe cutor $ Worker.run (Unknown Source) на org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) в java.lang.Thread.run (Unknown Source)
И исключение указывает на второй запрос, указанный в моем вопросе.
Если время меньше, скажем, как 2 минуты или 3 минуты, оно обновляется без каких-либо проблем.
пожалуйста, где я иду не так, и как я могу это исправить.
Моя Перерывы таблица выглядит ниже
Вместо нуль, то это должно быть конец времени запечатлен на кнопку мыши
и мое время трекер выглядит, как показано ниже.
вместо 4.97
в скриншоте выше должна быть сумма totalbreaktime
от моего первого экрана.
Благодаря
Насколько я могу сказать, что вы принимаете разницу между первым января 1900 года и некоторые даты. «датифик» может преодолевать только 68-летнюю стоимость секунд, см. https://msdn.microsoft.com/en-us/library/ms189794(v=sql.110).aspx. Поскольку вы все равно разделите на 60, почему бы не просто используйте 'lateiff (минуты, ...)' или переосмыслите то, что вы делаете вообще. –
, поскольку количество секунд между 1 января 1900 года и текущей датой и временем составляет около 3 681 185 640. Это больше, чем 32-битное целое число, и функция 'lateiff' ограничена этим. –
BTW: Я предлагаю вам также отправить 1) код с использованными значениями значений и 2) значения вставлены. –