问候语。
我有一个mysql表time\u和一个列time\u,如下所示:
| TIME_WORKED | varchar(500) | YES | | NULL | |
我正在使用jdbctemplate在spring应用程序中查找总和(工作时间),如下所示:
String totalEffortQuery = "SELECT sum(TIME_WORKED) FROM time_worked WHERE USER = ? and UPDATED>= now() - INTERVAL 1 DAY";
Long totalEffortSeconds = jdbcTemplate.queryForObject(
totalEffortQuery, new Object[] { assignedTo }, Long.class);
但是totaleffortseconds总是有一个空值。
但当我直接在数据库中运行此查询时,它会返回以下结果:
SELECT sum(TIME_WORKED) FROM time_worked WHERE USER = 'Vishwanath Krishna Bhat' and UPDATED>= now() - INTERVAL 1 DAY;
+------------------+
| sum(TIME_WORKED) |
+------------------+
| 43200 |
+------------------+
1 row in set (0.02 sec)
我在某个地方读到,不能对非数字值使用sum,但当我直接在数据库中使用sum时,它确实起作用。
请注意,我在java代码中传递的是正确的用户值,这不是问题所在。
有人能帮我一下吗?
你好,维什瓦
1条答案
按热度按时间2wnc66cl1#
可以将varchar值强制转换为unsigned。
修改后的查询将被删除
但这不是一种正确的方法,因为这样会消耗大量cup资源,最好将列转换为数字数据类型,如果不可能,请添加另一个具有数字数据类型的列,并在insert和update时添加触发器以存储该列中的值,以便用于此操作。