我希望能够从我有连接的数据库服务器获取当前日期/时间(时间戳),而不管数据库是什么。 (理想情况下,我想要适用于Oracle,DB2,SQL Server和Postgres的东西。)
在网上搜索时,我看到了对LOCALTIMESTAMP函数和NOW()以及CURRENT_TIMESTAMP的暗示,但我看不清楚这些是否真正以跨RDBMS的互操作方式工作。
如果有必要,我愿意为不同的数据库编写替代方案,但是对于各个数据库供应商的最佳方法,我们甚至都没有看到任何清晰度。当然,如果每个都需要以不同的方式完成,那么必须有一些包装JDBC连接的Java库并执行此操作吗?
除了弄清楚要使用哪个SQL函数之外,我还想知道是否有一种标准方法来执行只是函数调用的SQL查询 - 某些DB似乎支持
SELECT fn();
...但Oracle似乎需要添加
...FROM DUAL;
我知道SQL“标准”有点狡猾,但我想知道在数据库和JDBC及相关库中工作的人比我更有经验,是否能指出我正确的方向。
谢谢!
答案 0 :(得分:2)
函数调用因各种数据库而异。使用PostgreSQL时,Oracle中的SELECT fun_name()
很简单,您必须添加FROM dual
。在其他数据库中,我使用:Informix,您调用过程/函数而不是使用SELECT但使用execute procedure/function
。
我认为最简单的解决方案是在运行时检查当前正在使用的数据库,然后构建该数据库所需的查询。
答案 1 :(得分:1)
current_timestamp是ansi函数,为了兼容性,你可以使用dual: 从双
中选择current_timestamp答案 2 :(得分:1)
您还应该记住,不同的RDBMS将以不同的格式返回当前日期和时间。至少,日期和时间之间的分隔符会有差异,有些默认情况下会包含微秒,有些会默认包含时区。
答案 3 :(得分:0)
或者编写一个函数/ sp来执行它并执行它。封装SP中的平台差异。