【问题标题】:Trunc(sysdate) in SQL ServerSQL Server 中的 Trunc(sysdate)
【发布时间】:2010-12-15 08:22:36
【问题描述】:

相当于什么:

TRUNC(SYSDATE) 

...在 SQL Server 2005 中?

【问题讨论】:

  • 30 个问题,不接受答案?为什么要打扰?
  • 这个问题是合法的 - OP 想要 ORACLE 的等效功能。

标签: sql sql-server sql-server-2005 oracle tsql


【解决方案1】:

推荐:

DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

这是另一种选择,但由于转换为 FLOAT,因此存在风险。它也被证明不能像 DATEADD/DATEDIFF 方法那样扩展性能。

CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)

【讨论】:

  • 为了获得 TRUNC() 我必须做所有这些?
  • 这行得通,但切换 DATEADD 的第二个和第三个参数会更正确。第二个参数是增量,因此您将 0 添加到 DATEDIFF 返回的天数。
【解决方案2】:

另一种选择是使用CONVERT(MSSQL 2008 及更高版本)并使用适当的样式或使用您可以订阅的样式。不过,我不知道与 dateadd/datediff 解决方案相比的性能。

例如

SELECT SUBSTRING(CONVERT(nvarchar(30), GETDATE(), 120), 1, 16)

返回:

2012-01-03 15:30

使用列出每分钟创建的行的组的示例(预设一个“已创建”日期时间列):

SELECT SUBSTRING(CONVERT(nvarchar(30), created, 120), 1, 16) as [minute]
, COUNT(1) as [per min]
FROM foo
GROUP BY SUBSTRING(CONVERT(nvarchar(30), created, 120), 1, 16)

【讨论】:

  • 如果您使用的是 SQL Server 2008 或更高版本,只需使用 CONVERT(date,getdate())。 Date 数据类型不存储时间信息。
猜你喜欢
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2021-01-16
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多