【问题标题】:SQL date to a float then back to a dateSQL 日期为浮点数,然后返回日期
【发布时间】:2014-07-01 14:40:04
【问题描述】:

大家好,我有以下问题:

SELECT LTRIM(STR(CAST(CAST('7/1/2014 9:07:00 AM' as datetime) AS float), 20, 10)) ContactDateTime

这个查询产生这个数字:41819.3798611111

现在我需要做的是将它转换回正常的 '7/1/2014 9:07:00 AM' 日期(如果可能的话)。但是,我不确定如何在 MS SQL 中执行此操作。

任何帮助将不胜感激!

【问题讨论】:

  • 所以你想去 Datetime -> Float -> String -> Datetime??
  • 为什么要转换成浮点数,然后再转换成日期?我认为如果您解释一下为什么需要这样做可能会有所帮助,因为它现在看起来的方式似乎违反直觉,转换为不同的数据类型,然后返回原始数据类型
  • 这是我无法更改的旧代码,因此我需要弄清楚如何(如果可能)将该数字转换回日期。但我同意你的看法,@rhealitycheck 但它不在我的掌控之中。
  • 为什么有人首先将日期设置为浮点数????????????
  • 正确@rhealitycheck。 SELECT CAST(41819.3798611111 AS DATETIME) 帖子在我想做的事情上工作得很好。我知道这是一种奇怪的做法,但就像我说的那样,因为它是旧代码,所以它不在我的手中。更改它必然会导致其他错误。

标签: sql sql-server date casting floating-point


【解决方案1】:

这是一种将 DateTime 舍入到最接近秒的方法:

DECLARE @Float FLOAT
SET @Float = 41819.3798611111
SELECT DATEADD(ms, 500 - DATEPART(ms, CAST(@Float AS DATETIME) + '00:00:00.500'), CAST(@Float AS DATETIME))

2014-07-01 09:07:00.000

【讨论】:

  • 我想相关的问题是,你在寻找多少精度?这将使您进入第二阶段。
【解决方案2】:

选择 CAST(41819.3798611111 作为日期时间)

【讨论】:

  • 从 DateTime 转换为 float 时精度丢失。转换回 DateTime 并不会降低它的准确性。
  • 转换回 DataTime 可能会让人们认为如果看到浮点数会比他们预期的精度更高。
【解决方案3】:

您可以简单地CAST 回复它(刚刚在 SSMS2012 中尝试过)

DECLARE @myFloat FLOAT
DECLARE @myDate DATETIME

SELECT @myFloat = LTRIM(STR(CAST(CAST('7/1/2014 9:07:00 AM' as datetime) AS float), 20, 10))
SELECT @myDate = CAST(@myFloat AS DATETIME)

SELECT @myDate

选择显示2014-07-01 09:06:59.997 对我来说相当准确;)

【讨论】:

  • Msg 139,级别 15,状态 1,行 0 无法为局部变量分配默认值。消息 139,级别 15,状态 1,行 0 无法将默认值分配给局部变量。 Msg 137, Level 15, State 2, Line 4 必须声明标量变量“@myDate”。
  • 那么您使用的是 SQL Server 2005 或更早版本?
  • @StealthRT 我编辑了我的帖子,它现在应该也可以在 2005 年使用
  • @DrCopyPaste 我正在使用 SQL Server Management Studio 2012
  • @StealthRT 嗯我不明白,我也是!如果你复制了整个代码,它怎么对你不起作用?
【解决方案4】:

你可以试试这个

SELECT CONVERT(DATETIME, 41819.3798611111)

但是 float 似乎不够精确,所以 convert 给出了

2014-07-01 09:06:59.997

但是如果你在最后再加一个1:

SELECT CONVERT(DATETIME, 41819.37986111111)

它给了

2014-07-01 09:07:00.000

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    相关资源
    最近更新 更多