【问题标题】:Datetime int float, why we can go to float but not to int [closed]Datetime int float,为什么我们可以去 float 但不能去 int [关闭]
【发布时间】:2014-02-04 15:18:39
【问题描述】:

将 Datetime 转换为浮点数时,您会得到浮点数的偏移量。 将其转换为 int 仅给出部分日期。 到目前为止一切顺利,当我们回到日期时间时,我们有一个修剪过的日期

做同样的事情并直接转换为 int 并且返回 datetime 仅在某些时候有效。

主要用于sql server

代码:

CONVERT(datetime,floor(CONVERT(float,START_TIME_1)))

不工作:

CONVERT(datetime,CONVERT(Int,START_TIME_1))

有人知道这是为什么吗?

“Mikael Eriksson”给了我这个问题的答案 -> “这是因为从 datetime 转换为 int 时,值会四舍五入到最接近的 int。时间部分等于或大于 12:00 的 Datetime 值将向上舍入到下一个整数/天。”

显然这是一个过时的问题,因为现在到处都支持 cast 和 convert 函数。 更不用说应该使用 datetime2 了。

【问题讨论】:

  • 你使用什么语言?
  • 如果没有更多信息 - 理想情况下是语言/平台 + 带有示例数据的示例代码 - 这个问题是无法回答的。
  • CONVERT(datetime,floor(CONVERT(float,START_TIME_1)))
  • 但是直接进入 int 行不通
  • 只是为了澄清。这里的“不工作”是否意味着有时转换为int 的日期会在第二天返回,就像在这个SQL Fiddle 中一样?

标签: sql sql-server datetime int


【解决方案1】:

要删除 SQL Server 2005 中的时间部分,您可以使用以下命令:

select dateadd(day, datediff(day, 0, getdate()), 0)

从 SQL Server 2008 开始,您可以改用日期数据类型。

select cast(getdate() as date)

如您所见,转换为float 并使用floor 函数也可以工作,但我认为上述替代方案更受欢迎。

您的问题是为什么转换为 integer 有时会返回错误的值。

这是因为从datetime 转换为int 时,该值会四舍五入到最接近的intDatetime 时间部分等于或大于 12:00 的值将向上舍入到下一个整数/天。

该行为记录在“截断和舍入结果”部分的CAST and CONVERT (Transact-SQL) 中。

【讨论】:

    【解决方案2】:

    使用的语言?

    尝试将其转换为 Long 或等效的大整数。

    【讨论】:

    • 尝试了一个 bigint 但只有一个 float 有效,所以它不是。由于 int 的大小限制
    • 使用的语言??????????
    • 嗯,对不起。过去 10 年没有使用 Micro$oft sql 服务器的经验:S。如果您希望别人(其他人)能够帮助您,请发布您的代码。
    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2018-12-29
    • 2014-02-09
    • 2011-06-11
    • 2014-08-12
    • 1970-01-01
    • 2019-06-24
    相关资源
    最近更新 更多