【问题标题】:Calculation about more than 24 hours in SQL Server 2005在 SQL Server 2005 中计算超过 24 小时
【发布时间】:2012-04-24 07:04:28
【问题描述】:

我需要创建一个存储大于 24 小时的列。例如'25:00:00''129:23:12' 等)。

该列将用于在datetime 间隔:“时间”之间执行计算。

我在尝试

SELECT  CAST((CAST(CAST(RIGHT('107:37', 6) as datetime) AS FLOAT))/(207.160) AS DATETIME)

如果是的话

低于'23:59' 而不是'107:37' 工作正常。

'107:37' 报错:

char 数据类型到 datetime 数据类型的转换导致 超出范围的日期时间值。

【问题讨论】:

  • 这很愚蠢。如果您想计算时间或日期间隔,那么为什么不直接使用 datetime 类型以及时间和日期函数呢?
  • 只存储秒数不是更简单吗?转换为小时和分钟是简单的算术。
  • 不,将数字存储为日期时间会更简单,并使用 datediff() 之类的函数。例如:stackoverflow.com/questions/1770594/…
  • 要将小时和分钟转换为日期时间,请使用select dateadd (hour, 107, dateadd(minute, 37, 0))。 0 给出 1-1-1900;您可能想将其更改为其他日期。

标签: sql sql-server sql-server-2005


【解决方案1】:

只需将值存储为日期时间数据类型。您可以对日期时间数据类型进行数学计算,例如 +、-、SUM、MIN、MAX 等,也可以使用 DateDiff 和 DateAdd。您将遇到的唯一棘手的问题是将值显示为 HHHH:mm:ss。不过,您可以很容易地做到这一点:

DECLARE @datetime DATETIME
SET @datetime = 4.2
SELECT CAST((FLOOR(CAST(@datetime AS FLOAT)) * 24) + DatePart(Hour, @datetime) AS VARCHAR) + 
    ':' + CAST(DatePart(Minute, @datetime) AS VARCHAR)
    + ':' + CAST(DatePart(Second, @datetime) AS VARCHAR)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多