不同时区处于查询条件的Oracle systimestamp

问题描述 投票:0回答:1

我有以下使用JDBC com.oracle.ojdbc:ojdbc8:19.3.0.0的代码。有趣的列是lock_until TIMESTAMP(3)。该代码插入systimestamp + 5 minutes,然后选择带有lock_until < systimestamp的所有行。我希望结果集中没有行,因为lock_until将来会出现,但会返回该行。最可能的原因是我的本地时区是UTC + 2,但我看不出这怎么可能。该代码按预期与current_timestamp一起工作,但我希望代码与客户端时区无关。

jdbcTemplate.update("delete from shedlock where name = 'test'");
System.out.println(jdbcTemplate.queryForList("SELECT SESSIONTIMEZONE FROM dual"));
// insert, lock_until is now + 5 minutes
jdbcTemplate.update("INSERT INTO shedlock(name, lock_until, locked_at, locked_by) VALUES('test', systimestamp + 5/(24 * 60), systimestamp, 'me')");
// select if lock_until <= systimestamp
System.out.println(jdbcTemplate.queryForList("select * from shedlock where lock_until <= systimestamp"));
// systimestamp ?
System.out.println(jdbcTemplate.queryForList("select systimestamp from dual"));

结果]

Local time: 17:32:48.872
[{SESSIONTIMEZONE=Europe/Prague}]
[{NAME=test, LOCK_UNTIL=2020-04-25 15:37:49.0, LOCKED_AT=2020-04-25 15:32:49.106, LOCKED_BY=me}]
[{SYSTIMESTAMP=2020-04-25 17:32:49.168954}]

我有以下使用JDBC com.oracle.ojdbc:ojdbc8:19.3.0.0的代码。有趣的列是lock_until TIMESTAMP(3)。该代码插入systimestamp + 5分钟,然后选择所有带有...

oracle jdbc timestamp timezone
1个回答
1
投票
© www.soinside.com 2019 - 2024. All rights reserved.