我有一个SQL表,“data”,包含以下列: id(int), date1(datetime), date2(datetime), 差异(浮动)
我想要做的是更新此表,以便“差异”列包含date2和date1之间的年份差异(作为浮点数),仅当date2不等于'0000-00-00 00时: 00:00'
我正在考虑一些事情
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';
然而,当我尝试这个时,我收到一条错误,指出“SQL语法错误。请检查您的MySQL服务器版本以获取正确的语法,以便使用近似数据SET difference = datediff(”hh,m.date2,m0.date10 / 8765) 'd'在第1行“
如何修改我的sql语句以获得所需的结果?
编辑:
我正在使用xampp的phpMyAdmin接口来运行这个sql语句
答案 0 :(得分:0)
Update语句假设在表格中:
UPDATE table
SET column1 = expression1,
column2 = expression2,
...
WHERE conditions;
因此,您的from
条款无关紧要。
您可以使用joins
和子select
- 查询来链接到其他表格。
- 关于如何实现这一点(实际上,完全重复)有很好的demos:
UPDATE TABLEA a
JOIN TABLEB b ON a.join_colA = b.join_colB
SET a.columnToUpdate = [something]
答案 1 :(得分:0)
由于诺伯特的建议,我明白了。
我用过
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';
我使用的是mysql datediff的错误语法,它将2个日期作为参数,并以天为单位返回差异。
答案 2 :(得分:-1)
尝试使用此语法进行多表更新:
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';
请注意,在SET语句中,您还需要指明要更新的表,否则它仍然会给您一个很好的警告。