Как конвертировать VARCHAR для времени в Java? - PullRequest
2 голосов
/ 10 августа 2010

Я копирую данные из CSV-файла в мою базу данных (MySQL) с помощью Java.у меня есть столбец времени, где значения могут быть h:mm:ss или - h:mm:ss (- означает, что мы превзошли определенную задержку).

, поэтому я был вынужден изменить тип столбца на varchar.

Теперь моя проблема заключается в том, что мне нужно сравнить значение записей в этом столбце, например, мне нужно показать все записи, где значение этого столбца меньше 30 минут, зная, что значение поля превышает значение24-часовой формат (может быть 56:00:00).

спасибо за помощь

Ответы [ 4 ]

3 голосов
/ 10 августа 2010

Скорее преобразуйте его в секунды и сохраните как целое число со знаком. Вы не можете выполнять числовые операции непосредственно над строками / 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;
    }
}

Вот как вы можете использовать его и, наконец, сохранить в БД:

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 голос
/ 10 августа 2010

Удалите [] и переместите его в поле типа ВРЕМЯ, и все будет в порядке

UPDATE tableName SET timeField = REPLACE(REPLACE(varCharField,'[',''),']','')

1 голос
/ 10 августа 2010

Х

Эту проблему можно решить либо установкой временных данных в одном столбце и логическим флагом в другом столбце той же записи, которые отличаются между записями «-» и «-», Я полагаю, это знак минус, это в общем решение. Поскольку вы используете mysql , где вы можете установить данные непосредственно со знаком '-', который показывает отрицательное значение ( время тип данных) в столбце и, как вы сказали, вам нужно сравнить их с условия, такие как 30 минут (00:30:00) и т. д., вы можете использовать subtime () или addtime () mysql синтаксис для сравнения. Надеюсь, вы найдете этот ответ уместным.

привет

la_89ondevg

0 голосов
/ 10 августа 2010

Я не опытный разработчик Java, но я знаю в php, что ваш запрос (если я правильно понимаю) может быть достигнут с помощью strtotime, поэтому, используя его в качестве поиска, я нашел эту тему.

PHP strtotime () в Java

, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...