【问题标题】:Will DATETIME(3) data type work for Microsoft SQL Server?DATETIME(3) 数据类型是否适用于 Microsoft SQL Server?
【发布时间】:2022-02-01 00:14:06
【问题描述】:

对于 MySQL,要指定数据类型日期时间,则必须使用关键字DATETIME。但它只会给你正常的时间。不是毫秒。

mysql> SELECT col,
     >     CAST(col AT TIME ZONE INTERVAL '+00:00' AS DATETIME) AS ut
     >     FROM ts ORDER BY id;
+---------------------+---------------------+
| col                 | ut                  |
+---------------------+---------------------+
| 2020-01-01 10:10:10 | 2020-01-01 15:10:10 |
| 2019-12-31 23:40:10 | 2020-01-01 04:40:10 |
| 2020-01-01 13:10:10 | 2020-01-01 18:10:10 |
| 2020-01-01 10:10:10 | 2020-01-01 15:10:10 |
| 2020-01-01 04:40:10 | 2020-01-01 09:40:10 |
| 2020-01-01 18:10:10 | 2020-01-01 23:10:10 |
+---------------------+---------------------+

要以毫秒为单位,必须使用DATETIME(3),而对于微秒,必须使用DATETIME(6)

但对于 Microsoft SQL Server,DATETIME 将默认为您提供hh:mm:ss:mmmhttps://www.mssqltips.com/sqlservertip/5993/sql-server-date-and-time-functions-with-examples/

问题:

如果我在 Microsoft SQL Server 中使用 DATETIME(3) 会发生什么? 我会收到错误消息,还是会按照默认设置给我时间戳hh:mm:ss:mmm

我没有 Microsoft SQL Server。只有 MySQL,但我正在尝试使我的 C++ 代码与这两个 SQL 服务器兼容。

【问题讨论】:

  • 使用 dbfiddle 检查。或查看official docs
  • 是的,试试看:dbfiddle.uk/?rdbms=sqlserver_2019l
  • 我尝试让 SQL 代码在不同品牌的 SQL 实现之间兼容。尽管 SQL 语言基于一个通用的标准规范,但这通常是不可能的。每个品牌都引入了自己的定制功能。如果您仅将代码限制为不同品牌的相同功能,那么您将无法使用每个品牌提供的任何独特、有价值的功能。
  • 如果要指定精度,则需要 SQL Server 中的 DATETIME2
  • @BillKarwin 我明白了!

标签: sql-server datetime


【解决方案1】:

默认情况下,日期时间数据类型以毫秒为精度返回。毫秒值四舍五入为 0.000、0.003 或 0.007 秒的增量。Datetime

SELECT GETDATE()

2022-01-31 03:02:58.997

但是,如果您想指定精度,您可以使用 datetime2 数据类型。 Datetime2 是 ANSI 标准,精确到 100 纳秒。

DECLARE @datetime2literal datetime2(3) = '2022-01-10 10:22:33.1234567'
SELECT @datetime2literal

2022-01-10 10:22:33.123

我建议您使用DATETIME2,因为它具有更少的存储空间和更高的精度,并且符合 ANSI 标准。 DateTime2

Datetime2的优势
Reference article

  • 更大的日期范围
  • 更大的默认小数精度
  • 可选的用户指定精度
  • 精度更高,即使使用与日期时间相同的小数位数(即 3)
  • 使用与日期时间相同的小数位数时存储空间更小,但精度更高* 使用比 datetime 少 2 个字节的存储空间的选项(尽管精度较低)*
  • 符合 SQL 标准(ANSI 和 ISO 8601)

【讨论】:

  • 你的意思是让你的 datetime2 链接回到这个答案吗?
  • @BenThul,感谢您的检查。我现在更新了链接。
猜你喜欢
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多