Sql 如何通过JDBC从数据库服务器获取当前日期/时间,而不考虑数据库供应商?

Sql 如何通过JDBC从数据库服务器获取当前日期/时间,而不考虑数据库供应商?,sql,oracle,jdbc,db2,timestamp,Sql,Oracle,Jdbc,Db2,Timestamp,我希望能够从连接到的DB服务器获取当前日期/时间戳,而不考虑DB。理想情况下,我想要一些适用于Oracle、DB2、SQL Server和Postgres的东西 在互联网上搜索时,我看到了LOCALTIMESTAMP函数、现在和当前的时间戳,但我没有看到任何关于这些函数是否真的可以跨RDBMS以互操作方式工作的明确信息 如果必要的话,我愿意为不同的数据库编写替代方案,但我甚至没有看到任何关于为单个数据库供应商实现这一点的最佳方法的明确信息。当然,如果需要对每种连接进行不同的处理,那么必须有一些J

我希望能够从连接到的DB服务器获取当前日期/时间戳,而不考虑DB。理想情况下,我想要一些适用于Oracle、DB2、SQL Server和Postgres的东西

在互联网上搜索时,我看到了LOCALTIMESTAMP函数、现在和当前的时间戳,但我没有看到任何关于这些函数是否真的可以跨RDBMS以互操作方式工作的明确信息

如果必要的话,我愿意为不同的数据库编写替代方案,但我甚至没有看到任何关于为单个数据库供应商实现这一点的最佳方法的明确信息。当然,如果需要对每种连接进行不同的处理,那么必须有一些Java库来包装JDBC连接,并做到这一点

除了弄清楚要使用哪一个SQL函数外,我还想知道是否有一种标准的方法来执行SQL查询,它只是一个函数调用——一些DBs似乎支持这种方法

SELECT fn();
…但Oracle似乎需要添加

...FROM DUAL;
我知道SQL标准有点不可靠,但我想知道,在跨数据库、使用JDBC和相关库方面比我更有经验的人是否能够为我指明正确的方向


谢谢

current_timestamp是ansi函数,为了兼容,您可以使用双:
从dual中选择current_timestamp(当前时间戳),或者编写一个函数/sp来执行它并执行它。封装SP中的平台差异。

不同数据库中的函数调用不同。在使用PostgreSQL时,只需在Oracle中选择您必须从dual添加的名称。在我使用的另一个数据库中:Informix您调用的过程/函数不是SELECT,而是execute过程/函数


我认为最简单的解决方案是在运行时检查当前使用的数据库,然后构建该数据库所需的查询。

您还应该记住,不同的RDBMS将以不同的格式返回当前日期和时间。至少,日期和时间之间的分隔符会有所不同,有些默认包含微秒,有些默认包含时区。

不幸的是,我没有权限向目标数据库系统添加任何内容:只要使用JDBC,就应该在结果集上使用getDate,这样就可以得到一个java.sql.Date对象,而不必担心格式化问题。DB2 for I使用点分隔符:CURRENT_TIMESTAMP=2010-11-19-13.47.31.186787 dual不是Oracle的问题吗事情看起来是mysql做的,但不是PostgreSQL。谢谢。最后,这似乎是唯一可行的解决方案,尽管令人失望。