SQL Server 2008 SYSDATETIME返回错误的日期

时间:2011-10-19 15:15:45

标签: sql-server-2008 datetime jdbc

当我使用SYSDATETIME()执行选择时,它会在过去两天给我一个日期!三个日期函数给我过去的日期,三个给我正确的日期。见下文。

SELECT SYSDATETIME(),
       SYSDATETIMEOFFSET(),
       SYSUTCDATETIME(),
       CURRENT_TIMESTAMP,
       GETDATE(),
       GETUTCDATE()  
==================================
2011-10-17 10:41:00.4521484
2011-10-17 10:41:00.4521484 -04:00
2011-10-17 14:41:00.4521484
2011-10-19 10:41:00.447
2011-10-19 10:41:00.447
2011-10-19 14:41:00.45

我正在使用MS SQLServer 2008和JDBC 3.0驱动程序:

DatabaseProductName: MICROSOFT SQL SERVER
DriverName: Microsoft SQL Server JDBC Driver 3.0
getDatabaseProductName: Microsoft SQL Server
getDatabaseProductVersion: 10.50.1600
getDriverVersion: 3.0.1301.101
getDriverMajorVersion: 3
getDriverMinorVersion: 0
getDriverName: Microsoft SQL Server JDBC Driver 3.0

这里有什么想法?

4 个答案:

答案 0 :(得分:3)

SQL Server的Microsoft JDBC驱动程序不支持JRE 1.7。我在使用MSSQL服务器和JRE-1.7时遇到了同样的问题。使用Microsoft发布的热修复(为我工作)来解决您的问题。

此修补程序现已可用。 http://blogs.msdn.com/b/jdbcteam/archive/2012/01/20/hotfix-available-for-date-issue-when-using-jre-1-7.aspx

请使用上述文章中的兼容性信息,并根据您的应用程序安装适当的修复程序。

希望这有助于:) 干杯

答案 1 :(得分:1)

查询中的前三个函数SYSDATETIME(),SYSDATETIMEOFFSET(),SYSUTCDATETIME()获取运行SQL Server实例的计算机的日期和时间

最后三个CURRENT_TIMESTAMP,GETDATE(),GETUTCDATE()采取日期&来自运行SQL Server实例的计算机操作系统的时间。

答案 2 :(得分:0)

我们遇到了同样的问题,并且能够通过从Java 1.7 SDK回退到Java 1.6来修复它(但不是_30版本,它有问题)。

答案 3 :(得分:0)

我们解决这个问题的方法是切换到sqljdbc4-4.0.jar。