UNIX 时间戳到日期时间与 MS 不一致 SQL
UNIX Timestamp to Datetime inconsistencies with MS SQL
我目前为 BigSense 开发,我们支持三种数据库后端:MySQL、Postgres 和 MS SQL。最近我 运行 在编写测试用例时遇到了一个有趣的 times/query 问题。
给定以下 UNIX 时间戳:1499839328918
并给出以下数据类型:
MySQL: DATETIME(6)
Postgres: TIMESTAMP WITHOUT TIME ZONE
Microsoft SQL: DATETIME
我使用以下函数将 UNIX 时间戳转换为 java.sql.Timestamp
def timestampToDate(unixTimeStamp: String) : java.sql.Timestamp = new java.sql.Timestamp(unixTimeStamp.toLong)
在 Scala REPL 中,这似乎给了我以下日期:
scala> timestampToDate("1499839328918")
res0: java.sql.Timestamp = 2017-07-12 06:02:08.918
然而,当我执行 INSERT
然后 SELECT
、Postgres/MySQL 给我上述正确时间时,但是对于 Microsoft SQL,我得到以下信息: 2017-07-12 06:02:08.917
所以它关闭了 1/100 秒,通常我不会在意,但我希望我的自动化测试能够通过而不必捏造时间戳的 100 秒位置。我尝试了其他几个时间戳,它们似乎都对 MS SQL 无效。这里发生了什么?这是 Microsoft JDBC 驱动程序的问题还是 MS SQL 进行了奇怪的时间戳舍入?
编辑 我正在使用 "net.sourceforge.jtds" % "jtds" % "1.3.1",
据我所知,MsSQL DATETIME 数据类型的分辨率很奇怪,因为毫秒四舍五入为 0、3 或 7,所以您似乎属于这些情况之一。
您可能想要使用分辨率为 100ns 的 DATETIME2 数据类型(我猜是从 SqLServer2008 开始)。
虽然小时差异应取决于服务器时区。
我目前为 BigSense 开发,我们支持三种数据库后端:MySQL、Postgres 和 MS SQL。最近我 运行 在编写测试用例时遇到了一个有趣的 times/query 问题。
给定以下 UNIX 时间戳:1499839328918
并给出以下数据类型:
MySQL: DATETIME(6)
Postgres: TIMESTAMP WITHOUT TIME ZONE
Microsoft SQL: DATETIME
我使用以下函数将 UNIX 时间戳转换为 java.sql.Timestamp
def timestampToDate(unixTimeStamp: String) : java.sql.Timestamp = new java.sql.Timestamp(unixTimeStamp.toLong)
在 Scala REPL 中,这似乎给了我以下日期:
scala> timestampToDate("1499839328918")
res0: java.sql.Timestamp = 2017-07-12 06:02:08.918
然而,当我执行 INSERT
然后 SELECT
、Postgres/MySQL 给我上述正确时间时,但是对于 Microsoft SQL,我得到以下信息: 2017-07-12 06:02:08.917
所以它关闭了 1/100 秒,通常我不会在意,但我希望我的自动化测试能够通过而不必捏造时间戳的 100 秒位置。我尝试了其他几个时间戳,它们似乎都对 MS SQL 无效。这里发生了什么?这是 Microsoft JDBC 驱动程序的问题还是 MS SQL 进行了奇怪的时间戳舍入?
编辑 我正在使用 "net.sourceforge.jtds" % "jtds" % "1.3.1",
据我所知,MsSQL DATETIME 数据类型的分辨率很奇怪,因为毫秒四舍五入为 0、3 或 7,所以您似乎属于这些情况之一。
您可能想要使用分辨率为 100ns 的 DATETIME2 数据类型(我猜是从 SqLServer2008 开始)。
虽然小时差异应取决于服务器时区。