Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中将varchar转换为时间?_Java_Mysql - Fatal编程技术网

如何在java中将varchar转换为时间?

如何在java中将varchar转换为时间?,java,mysql,Java,Mysql,我正在用java将数据从csv文件复制到我的数据库(mysql)。我有一个时间列,其中的值可以是h:mm:ss或-h:mm:ss(-表示我们超过了某个时间延迟) 因此,我不得不将列类型更改为varchar 我现在的问题是我需要比较此列中记录的值,例如,我需要显示此列值小于30分钟的所有记录,知道字段值超过24小时格式(可以是56:00:00) 感谢您的帮助我不是Java开发专家,但我知道在php中,您的要求(如果我理解正确的话)可以通过strotime实现,因此使用strotime作为搜索,我找

我正在用java将数据从csv文件复制到我的数据库(mysql)。我有一个时间列,其中的值可以是
h:mm:ss
-h:mm:ss
-
表示我们超过了某个时间延迟)

因此,我不得不将列类型更改为
varchar

我现在的问题是我需要比较此列中记录的值,例如,我需要显示此列值小于30分钟的所有记录,知道字段值超过24小时格式(可以是56:00:00)


感谢您的帮助

我不是Java开发专家,但我知道在php中,您的要求(如果我理解正确的话)可以通过strotime实现,因此使用strotime作为搜索,我找到了此线程


希望这会有所帮助。

删除[]并将其移动到时间类型字段,您应该会没事的

updatetablename SET timeField=REPLACE(REPLACE(varCharField,[','',']','')
Hye

这个问题可以通过在一列中设置时间数据和在同一记录的另一列中设置布尔标志来解决,在“-”和非“-”记录之间存在差异,我假设这是负号,这是一般解决方案。当您使用mysql时,您可以直接使用列中显示负值(timedatatype)的“-”符号设置数据,并且正如您所说,您需要将它们与30分钟(00:30:00)等条件进行比较,您可以使用subtime()addtime()mysql语法用于比较。希望你觉得这个答案合适

问候


la_89ondevg

而是将其转换为秒,并将其存储为有符号整数。您不能直接对字符串/varchar执行数字操作,将其来回转换为可用格式的成本很高。那为什么不直接以那种格式存储呢

以下是如何将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

我已经省略了'[”并将数据类型设置为时间,但它不起作用。我忘了告诉您时间值不限于0-23。我可以使用56:00:00值指示它是7个工作日。你说的“不起作用”是什么意思。MySQL的时间列可以保存从“-838:59:59”到“838:59:59”的值,所以这不应该是一个问题。它给了我错误:时间格式不正确“-05:48:49”在第32列中,当我使用resultset.getTime(2)获取该列的值时。这似乎是应用程序中的错误,而不是MySQL中的错误。我不知道应用程序如何处理时间或它期望的格式。