问候。
我有一个MySQL表Time_worked,其中一个Time_worked列如下:
| TIME_WORKED | varchar(500) | YES | | NULL | |
我正在尝试使用JDBCTemplate在Spring应用程序中找到sum(Time_Worked):
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始终为NULL值。
但是当我按如下所示直接在数据库中运行此查询时,它将返回结果:
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时读取了它,但是当我直接在数据库中直接使用它时,它确实可以工作。
请注意,我在Java代码中传递了正确的USER值,这不是问题。
有人可以帮我吗?
关于, 毗湿婆
答案 0 :(得分:0)
您可以将varchar值强制转换为UNSIGNED。
修改后的查询将为
String totalEffortQuery = "SELECT sum(CAST(TIME_WORKED AS UNSIGNED)) FROM time_worked WHERE USER = ? and UPDATED>= now() - INTERVAL 1 DAY";
Long totalEffortSeconds = jdbcTemplate.queryForObject(
totalEffortQuery, new Object[] { assignedTo }, Long.class)
但这不是正确的方法,因为这会消耗大量杯子资源,最好将列转换为数值数据类型,如果不可能的话,请添加具有数值数据类型的另一列,并在插入和更新时添加触发器以存储该列中的值,以便您可以执行此操作。