【问题标题】:t-SQL CAST date returns 2 days lesst-SQL CAST 日期返回少 2 天
【发布时间】: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 以提取日期。无需通过floatdatetime 进行任何往返。仍然没有解释 OP 的观察结果。
  • 同上@Sparky。两列的值相同。

标签: tsql datetime date casting


【解决方案1】:

这是一个 bug in the JDBC driver 不处理 Date 数据类型。

A hotfix is available

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-28
    • 2014-04-16
    • 2021-01-23
    • 2018-09-20
    • 1970-01-01
    • 2023-04-10
    • 2019-03-23
    • 2021-03-20
    相关资源
    最近更新 更多