Skip to content

Selected datetime value doesn't match the original value on SQL Server 2016 #680

@hito4t

Description

@hito4t

Driver version or jar name

mssql-jdbc-6.1.6.jre7.jar

SQL Server version

SQL Server 2016

Client operating system

Windows 7 Enterprise (64bit)

Java/JVM version

java version "1.7.0_79"

Table schema

CREATE TABLE DATETIMETEST (
Id int,
UpdateDate datetime,
PRIMARY KEY (Id)
);

INSERT INTO DATETIMETEST VALUES(1, '2018-04-01 12:00:00.000');
INSERT INTO DATETIMETEST VALUES(2, '2018-04-01 12:00:01.003');

Problem description

On SQL Server 2016, selected datetime value doesn't match the original value.
It must be caused by the following change.
https://support.microsoft.com/en-us/help/4010261/sql-server-and-azure-sql-database-improvements-in-handling-some-data-t

But the problem doesn't occur in .NET.
Is it a problem of the JDBC driver?

Expected behavior and actual behavior

Expected: it matches.
Actual: it doesn't match.

Repro code

Connection conn = ...;

for (int i = 1; i <= 2; i++) {
    PreparedStatement statement1 = conn.prepareStatement("SELECT UpdateDate FROM DATETIMETEST WHERE ID=?");
    statement1.setInt(1, i);
    ResultSet resultSet1 = statement1.executeQuery();
    resultSet1.next();
    Timestamp date1 = resultSet1.getTimestamp(1);
    resultSet1.close();
    statement1.close();

    PreparedStatement statement2 = conn.prepareStatement("SELECT COUNT(*) FROM DATETIMETEST WHERE ID=? AND UpdateDate=?");
    statement2.setInt(1, i);
    statement2.setTimestamp(2, date1);
    ResultSet resultSet2 = statement2.executeQuery();
    resultSet2.next();
    // When Id=1, count=1
    // When Id=2, count=1 (SQL Server 2012) / count=0 (SQL Server 2016)
    System.out.println("Id=" + i + ", UpdateDate=" + date1 + ", count=" + resultSet2.getInt(1));
    resultSet2.close();
    statement2.close();
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions