【发布时间】:2011-11-05 17:04:28
【问题描述】:
有人可以解释一下为什么将日期时间转换为日期会返回 2 天前的日期吗?
我只是碰到这个,需要了解。
执行这个:
SELECT
CAST(FLOOR(CAST(GETDATE() AS float)) AS datetime) AS currDate,
CAST(CAST(FLOOR(CAST(GETDATE() AS float)) AS datetime) AS DATE) AS lessDays
在我的 Sql Server 2008 R2 中返回给我这个:
----------------------------------------------
| currDate | lessDays |
----------------------------------------------
| 2011-08-28 00:00:00.0 | 2011-08-26 |
----------------------------------------------
提前致谢
【问题讨论】:
-
我运行它并为两列获得相同的值...
-
您运行此查询时的当地时间是几点?
GETDATE()的两次调用可能会返回不同的结果,因此如果您在午夜运行它可以解释 1 天的差异。如果您始终得到不同的结果,您可以尝试执行SELECT <your_expression> FROM <some_table>并查看执行计划并查看计算标量操作的内容吗? -
浮动不可靠; DATEADD/DATEDIFF 是最快和最可靠的
-
@OMG - 您可以直接从
datetime转换为date以提取日期。无需通过float和datetime进行任何往返。仍然没有解释 OP 的观察结果。 -
同上@Sparky。两列的值相同。
标签: tsql datetime date casting