我正在使用java将数据从csv文件复制到我的数据库(mysql)。我有一个时间列,其值可以是h:mm:ss
或- h:mm:ss
(-
表示我们超过了某个时间延迟)。
所以我不得不将列类型更改为varchar
。
我现在的问题是我需要比较此列中记录的值,例如我需要显示此列的值小于30分钟的所有记录,知道字段值超过24h格式(可以是56:00:00)。
感谢您的帮助
答案 0 :(得分:3)
而是将其转换为秒并将其存储为有符号整数。你不能直接在字符串/ varchars上进行数值运算,将它按摩并返回到可用的格式是一个很高的成本。那么为什么不直接以那种格式存储呢?
以下是如何将CSV字段转换为秒的启动示例:
public static int toSeconds(String time) throws ParseException {
SimpleDateFormat positiveTime = new SimpleDateFormat("'['hh:mm:ss']'");
SimpleDateFormat negativeTime = new SimpleDateFormat("'[-'hh:mm:ss']'");
if (time.startsWith("[-")) {
return -1 * (int) negativeTime.parse(time).getTime() / 1000;
} else {
return (int) positiveTime.parse(time).getTime() / 1000;
}
}
以下是如何使用它并最终将其存储在DB中:
String time1 = "[00:00:30]";
String time2 = "[- 00:10:20]";
int time1InSeconds = toSeconds(time1);
int time2InSeconds = toSeconds(time2);
// ...
preparedStatement = connection.prepareStatement("INSERT INTO tbl (col1, col2) VALUES (?, ?)");
preparedStatement.setInt(1, time1InSeconds);
preparedStatement.setInt(2, time2InSeconds);
要选择超过30秒的时间,请执行以下操作:
SELECT col1, col2 FROM tbl WHERE col1 > 30
答案 1 :(得分:1)
删除[]并将其移至TIME类型字段,你应该没问题
UPDATE tableName SET timeField = REPLACE(REPLACE(varCharField,'[',''),']','')
答案 2 :(得分:1)
惠
这个问题可以通过在一列中设置时间数据而在同一记录的另一列中的布尔标志在' - '和非' - '之间有所不同来解决我假设的记录是减号,这是一般的解决方案。当您使用 mysql 时,可以使用“ - ”符号直接设置数据,该符号在列中显示负值(时间数据类型),如您所说,您需要比较它们具有30分钟(00:30:00)等条件,您可以使用 subtime()或 addtime() mysql语法进行比较。希望你能找到合适的答案。
问候
la_89ondevg
答案 3 :(得分:0)
我不是专家Java开发人员,但我知道在php中你的问题(如果我理解的话)可以用strtotime来实现,所以使用它作为搜索,我找到了这个帖子。
希望这会有所帮助。