Как конвертировать временной интервал из PostgreSQL в Java - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу выбрать столбец time_interval, который имеет тип interval из PostgreSQL.

и преобразовать в длинный тип с кодом Java

моя таблица

  trigger
  id   time_interval  cdate 
  1     01:00:00      2018-12-11
  2     1 day         2018-12-11
  3     1 month       2018-12-11
  4     00:05:00      2018-12-11

Java-код

   List<Long> results= executeQuery("select * from trigger limit 10",(rs,rowNum)->{

        Long time_interval = rs.getTimestamp("time_interval").getTime();

        return time_interval ;

    });

Моя ошибка

nested exception is
org.postgresql.util.PSQLException: Bad value for type timestamp/date/time: {1}

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Если вы все равно хотите, чтобы интервал был длинным, вы можете преобразовать интервал в длинный в SQL:

select id, extract(epoch from time_interval) as time_interval, cdate 
from trigger;

Затем вы можете использовать ResultSet.getLong("time_interval"), чтобы получить это значение без необходимости жонглироватьс вещами, которые JDBC изначально не поддерживает.

0 голосов
/ 11 декабря 2018

Существует специальный тип org.postgresql.util.PGInterval для обработки PostgreSQL interval s:

org.postgresql.util.PGInterval i =
    (org.postgresql.util.PGInterval) rs.getObject("time_interval");

// gives something like "1 years 0 mons 0 days 2 hours 0 mins 0.00 secs"
System.out.println(i);

// gives something like "2"
System.out.println(i.getHours());

Я не знаю, какое значение long вы хотите вычислить из интервала, но если этодлина в миллисекундах, вы можете продолжить следующим образом:

java.util.Calendar cal = new java.util.GregorianCalendar();
cal.setTimeInMillis(0);
i.add(cal);
System.out.println(cal.getTimeInMillis());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...