0

I have an SQL table, "data", with the following columns: id (int), date1 (datetime), date2 (datetime), difference (float)

What I would like to do is update this table so that the "difference" column contains the difference in years (as a float) between date2 and date1, only when date2 doesn't equal '0000-00-00 00:00:00'

I was thinking of something along the lines

Update data m
SET difference = datediff("hh",m.date2, m0.date1)/8765 --there are 8765 hours per year so this should give me my float
FROM data m0
WHERE m.id = m0.id
AND m.date2 <> '0000-00-00 00:00:00';

Yet when I try this I get an error stating "SQL syntax error. Check your MySQL server version for the right syntax to use near data SET difference = datediff("hh,m.date2,m0.date10/8765) from 'd' at line 1"

How would I modify my sql statement to get the desired results?

EDIT:

I am using xampp's phpMyAdmin interface to run this sql statement

Duncan
  • 9
  • 2

3 Answers3

0

Update statements are suppose to be on the form:

UPDATE table
SET column1 = expression1,
    column2 = expression2,
    ...
WHERE conditions;

Your from clause is thus irrelevant.

You can use joins and sub select-queries though to link to other tables.

-- There are excellent demos on how to achieve that (actually, a complete duplicate):

UPDATE TABLEA a 
JOIN TABLEB b ON a.join_colA = b.join_colB  
SET a.columnToUpdate = [something]
Community
  • 1
  • 1
Jonast92
  • 4,964
  • 1
  • 18
  • 32
0

I figured it out, thanks to Norbert's advice

I used

update data m, data m0
set m.difference = datediff(date(m.date2),date(m0.date2))/365
where m.id = m0.id
and m.date2 <> '0000-00-00 00:00:00';

I was using the incorrect syntax for mysql datediff, which takes 2 dates as a parameter and returns the difference in days.

Duncan
  • 9
  • 2
-1

Try this syntax for update with multiple tables:

Update data m, data m0
SET m.difference = datediff("hh",m.date2, m0.date1)/8765 
WHERE m.id = m0.id
AND m.date2 <> '0000-00-00 00:00:00';

Note that in the SET statement you also need to indicate which table you are updating else it will still give you a nice warning.

Norbert
  • 6,026
  • 3
  • 17
  • 40