ToreJohn
asked on
What is wrong with this MySQL statement?
The statement below does not give an error code, but it does not compute the TIMEDIFF:
"UPDATE Stop_times, Start_times
SET Stop_times.Project_Charge_ Time=TIMED IFF(Stop_t imes.STOPi d,Start_ti mes.STARTi d)
WHERE Start_times.PROJECTid = Stop_times.PROJECTid
AND
Start_times.EMPLOYid=Stop_ times.EMPL OYid"
but if you delete the update and modify it to a select statement like '/**UPDATE Stop_times, Start_times
SET Stop_times.Project_Charge_ Time=/**/ SELECT TIMEDIFF(Stop_times.STOPid ,Start_tim es.STARTid )
FROM Stop_times, Start_times
WHERE Start_times.PROJECTid = Stop_times.PROJECTid
AND
Start_times.EMPLOYid=Stop_ times.EMPL OYid
it computes the time difference correctly
"UPDATE Stop_times, Start_times
SET Stop_times.Project_Charge_
WHERE Start_times.PROJECTid = Stop_times.PROJECTid
AND
Start_times.EMPLOYid=Stop_
but if you delete the update and modify it to a select statement like '/**UPDATE Stop_times, Start_times
SET Stop_times.Project_Charge_
FROM Stop_times, Start_times
WHERE Start_times.PROJECTid = Stop_times.PROJECTid
AND
Start_times.EMPLOYid=Stop_
it computes the time difference correctly
Hi. You said it does not throw an error; therefore, how are you judging that it did not compute?
The syntax you have looks fine, so suspect something else. For example, by naming convention, I would not expect the actual time values to be in a column STARTid or STOPid. When I see that I think AUTO_INCREMENT or INT fields that are keys to a table. Try the below syntax ensuring that the columns in TIMEDIFF are indeed DATETIME columns. Since you said this works in SELECT, that may be the STARTid and STOPid, but may be worth double checking.
UPDATE Stop_times stp
JOIN Start_times strt
ON strt.PROJECTid = stp.PROJECTid
AND strt.EMPLOYid = stp.EMPLOYid
SET stp.Project_Charge_Time = TIMEDIFF(stp.STOPdatetime, strt.STARTdatetime)
;
ASKER
I can see that it does not work because stp.Project_Charge_Time is 0000-00-00 00:00:00 also after running the query. Your alternative code gives the same result. (When I modified stp.STOPdatetime to STOPid and the same for STARTid)
Wait. Project_Charge_Time is a datetime?
Remember TIMEDIFF is given you a difference in time values. It is not resulting in a datetime value. Please show the table structure(s) and some sample data with what you expect the final results to be.
Remember TIMEDIFF is given you a difference in time values. It is not resulting in a datetime value. Please show the table structure(s) and some sample data with what you expect the final results to be.
ASKER
Yes and Thanks.
I used datetime as the format for the output. Changing the format did the trick
I used datetime as the format for the output. Changing the format did the trick
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
It was fine. He understood that what I had done was correct and pointed me in the right direction.