mssql jdbc datetime java类型在兼容的SQLServer 2014与SQLServer2016中转换为datetime2

mssql jdbc datetime java类型在兼容的SQLServer 2014与SQLServer2016中转换为datetime2,datetime,sql-server-2016,mssql-jdbc,datetime2,compatibility-level,Datetime,Sql Server 2016,Mssql Jdbc,Datetime2,Compatibility Level,我们正在使用SQLServer 2012-2016。 DATETIME数据类型是许多表中键的一部分。 当我们使用jdbcTemplate.query执行查询时(query、queryParams、resultSetExtractor) 发送到SQLServer的是: sp_executesql N'SELECT * FROM [schema_example].[dbo].[tbl1] WHERE (dtContactGMTStartTime>@P0 OR @P1 is NULL)

我们正在使用SQLServer 2012-2016。 DATETIME数据类型是许多表中键的一部分。 当我们使用
jdbcTemplate.query执行查询时(query、queryParams、resultSetExtractor)
发送到SQLServer的是:

sp_executesql N'SELECT * FROM [schema_example].[dbo].[tbl1] 
WHERE  (dtContactGMTStartTime>@P0 OR @P1 is NULL) 
 ORDER BY dtContactGMTStartTime ASC',
N'@P0 datetime2,@P1 datetime2','2014-01-04 03:10:49.9330000','2014-01-04 03:10:49.9330000'
尽管数据库中的数据类型为DATETIME,但参数数据类型为DATETIME2。 看见 此外,SQLServer改变了它的行为,请参见下面的链接查看不同兼容性级别的示例 上述两个问题之间的连接导致sql语句为不同SQLServer版本中的相同数据检索不同的行

除了将数据库中的数据类型更改为DATETIME2(3)之外,还有其他解决方法吗

不同兼容级别的示例

select '20020202 02:02:02.000' AS String, CONVERT(datetime, '20020202 02:02:02.000') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.000')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.000')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.000') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.000')) AS [Datetime2_3ToDatetime2] union all
select '20020202 02:02:02.001' AS String, CONVERT(datetime, '20020202 02:02:02.001') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.001')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.001')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.001') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.001')) AS [Datetime2_3ToDatetime2] union all
select '20020202 02:02:02.002' AS String, CONVERT(datetime, '20020202 02:02:02.002') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.002')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.002')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.002') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.002')) AS [Datetime2_3ToDatetime2] union all
select '20020202 02:02:02.003' AS String, CONVERT(datetime, '20020202 02:02:02.003') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.003')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.003')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.003') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.003')) AS [Datetime2_3ToDatetime2] union all
select '20020202 02:02:02.004' AS String, CONVERT(datetime, '20020202 02:02:02.004') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.004')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.004')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.004') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.004')) AS [Datetime2_3ToDatetime2] union all
select '20020202 02:02:02.005' AS String, CONVERT(datetime, '20020202 02:02:02.005') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.005')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.005')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.005') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.005')) AS [Datetime2_3ToDatetime2] union all
select '20020202 02:02:02.006' AS String, CONVERT(datetime, '20020202 02:02:02.006') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.006')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.006')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.006') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.006')) AS [Datetime2_3ToDatetime2] union all
select '20020202 02:02:02.007' AS String, CONVERT(datetime, '20020202 02:02:02.007') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.007')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.007')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.007') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.007')) AS [Datetime2_3ToDatetime2] union all
select '20020202 02:02:02.008' AS String, CONVERT(datetime, '20020202 02:02:02.008') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.008')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.008')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.008') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.008')) AS [Datetime2_3ToDatetime2] union all
select '20020202 02:02:02.009' AS String, CONVERT(datetime, '20020202 02:02:02.009') AS [StringToDatetime], CONVERT(datetime2(3),  CONVERT(datetime, '20020202 02:02:02.009')) AS [DatetimeToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime, '20020202 02:02:02.009')) AS [DatetimeToDatetime2], CONVERT(datetime2(3), '20020202 02:02:02.009') AS [StringToDatetime2_3], CONVERT(datetime2,  CONVERT(datetime2(3), '20020202 02:02:02.009')) AS [Datetime2_3ToDatetime2]

SET COMPATIBILITY_LEVEL = 120
String                                StringToDatetime                     DatetimeToDatetime2_3               DatetimeToDatetime2                    StringToDatetime2_3                 Datetime2_3ToDatetime2
---------------------                 -----------------------              ---------------------------         ---------------------------            ---------------------------         ---------------------------
20020202 02:02:02.000                 2002-02-02 02:02:02.000              2002-02-02 02:02:02.000             2002-02-02 02:02:02.0000000            2002-02-02 02:02:02.000             2002-02-02 02:02:02.0000000
20020202 02:02:02.001                 2002-02-02 02:02:02.000              2002-02-02 02:02:02.000             2002-02-02 02:02:02.0000000            2002-02-02 02:02:02.001             2002-02-02 02:02:02.0010000
20020202 02:02:02.002                 2002-02-02 02:02:02.003              2002-02-02 02:02:02.003             **2002-02-02 02:02:02.0030000**            2002-02-02 02:02:02.002             2002-02-02 02:02:02.0020000
20020202 02:02:02.003                 2002-02-02 02:02:02.003              2002-02-02 02:02:02.003             **2002-02-02 02:02:02.0030000**            2002-02-02 02:02:02.003             2002-02-02 02:02:02.0030000
20020202 02:02:02.004                 2002-02-02 02:02:02.003              2002-02-02 02:02:02.003             **2002-02-02 02:02:02.0030000**            2002-02-02 02:02:02.004             2002-02-02 02:02:02.0040000
20020202 02:02:02.005                 2002-02-02 02:02:02.007              2002-02-02 02:02:02.007             **2002-02-02 02:02:02.0070000**            2002-02-02 02:02:02.005             2002-02-02 02:02:02.0050000
20020202 02:02:02.006                 2002-02-02 02:02:02.007              2002-02-02 02:02:02.007             **2002-02-02 02:02:02.0070000**            2002-02-02 02:02:02.006             2002-02-02 02:02:02.0060000
20020202 02:02:02.007                 2002-02-02 02:02:02.007              2002-02-02 02:02:02.007             **2002-02-02 02:02:02.0070000**            2002-02-02 02:02:02.007             2002-02-02 02:02:02.0070000
20020202 02:02:02.008                 2002-02-02 02:02:02.007              2002-02-02 02:02:02.007             2**002-02-02 02:02:02.0070000**            2002-02-02 02:02:02.008             2002-02-02 02:02:02.0080000
20020202 02:02:02.009                 2002-02-02 02:02:02.010              2002-02-02 02:02:02.010             2002-02-02 02:02:02.0100000            2002-02-02 02:02:02.009             2002-02-02 02:02:02.0090000

SET COMPATIBILITY_LEVEL = 130                                                                                                            
String                                StringToDatetime                     DatetimeToDatetime2_3               DatetimeToDatetime2                    StringToDatetime2_3                 Datetime2_3ToDatetime2
---------------------                 -----------------------              ---------------------------         ---------------------------           ---------------------------          ---------------------------
20020202 02:02:02.000                 2002-02-02 02:02:02.000              2002-02-02 02:02:02.000             2002-02-02 02:02:02.0000000            2002-02-02 02:02:02.000             2002-02-02 02:02:02.0000000
20020202 02:02:02.001                 2002-02-02 02:02:02.000              2002-02-02 02:02:02.000             2002-02-02 02:02:02.0000000            2002-02-02 02:02:02.001             2002-02-02 02:02:02.0010000
20020202 02:02:02.002                 2002-02-02 02:02:02.003              2002-02-02 02:02:02.003             **2002-02-02 02:02:02.0033333**            2002-02-02 02:02:02.002             2002-02-02 02:02:02.0020000
20020202 02:02:02.003                 2002-02-02 02:02:02.003              2002-02-02 02:02:02.003             **2002-02-02 02:02:02.0033333**            2002-02-02 02:02:02.003             2002-02-02 02:02:02.0030000
20020202 02:02:02.004                 2002-02-02 02:02:02.003              2002-02-02 02:02:02.003             **2002-02-02 02:02:02.0033333**            2002-02-02 02:02:02.004             2002-02-02 02:02:02.0040000
20020202 02:02:02.005                 2002-02-02 02:02:02.007              2002-02-02 02:02:02.007             **2002-02-02 02:02:02.0066667**            2002-02-02 02:02:02.005             2002-02-02 02:02:02.0050000
20020202 02:02:02.006                 2002-02-02 02:02:02.007              2002-02-02 02:02:02.007             **2002-02-02 02:02:02.0066667**            2002-02-02 02:02:02.006             2002-02-02 02:02:02.0060000
20020202 02:02:02.007                 2002-02-02 02:02:02.007              2002-02-02 02:02:02.007             **2002-02-02 02:02:02.0066667**            2002-02-02 02:02:02.007             2002-02-02 02:02:02.0070000
20020202 02:02:02.008                 2002-02-02 02:02:02.007              2002-02-02 02:02:02.007             **2002-02-02 02:02:02.0066667**            2002-02-02 02:02:02.008             2002-02-02 02:02:02.0080000
20020202 02:02:02.009                 2002-02-02 02:02:02.010              2002-02-02 02:02:02.010             2002-02-02 02:02:02.0100000            2002-02-02 02:02:02.009             2002-02-02 02:02:02.0090000