【问题标题】:SQL find out how many days into year date isSQL找出年份日期是多少天
【发布时间】:2015-08-24 09:11:32
【问题描述】:

我想根据日期计算出年度数字占一年的比例 - 因此,如果 400 是年度数字,我想将其除以 365,然后将结果乘以等于今天日期的天数(例如(400/365)*160))。

有没有办法通过 SQL 服务器选择语句来避免手动输入 160 数字?

400 数字来自名为 HES 的标准字段。

谢谢。

【问题讨论】:

  • 您是否在寻找 2015 年 1 月 1 日与今天日期之间的天数差异? SELECT DATEDIFF(DAY, '01/01/15', GETDATE())?
  • 当然,一旦 2016 年到来,它就会出现故障。 :) 请参阅this question 的答案,了解获取当年第一天的方法。
  • 假设您没有在午夜调用此代码,那么我们当前的日期是否计算在内(即整个 1 月 1 日的答案是“1”还是“0”)?

标签: sql sql-server date


【解决方案1】:

您可以使用datepart(dayofyear, getdate()) - 将返回一个代表一年中今天的数字。见MSDN DatePart

【讨论】:

  • 看起来像 MySQL。
  • 需要将 curdate() 更改为 getdate() 才能在 sql server 中工作。
  • 您将需要 dayofyear 而不是 dayoftheyear。除此之外,这看起来是一个很好的解决方案,所以我删除了不那么优雅的我的解决方案。 :)
【解决方案2】:

由于这是 sql server 而另一个答案是使用 mysql 我将发布 sql server 版本。

select DATEPART(dayofyear, getdate())

【讨论】:

    【解决方案3】:

    对于您的计算,您可能需要考虑闰年。 SQL Server 有一个方便的datepart(dayofyear, . . ) 功能。完整的解决方案如下所示:

    select datepart(dayofyear, dateadd(day, -1, cast(cast(year(getdate() + 1) as varchar(255)) + '0101' as date))) as daysinyear,
           datepart(dayofyear, getdate()) as currentday,
           datepart(dayofyear, getdate()) * 1.0 / datepart(dayofyear, dateadd(day, -1, cast(cast(year(getdate() + 1) as varchar(255)) + '0101' as date)))as daysinyear
    

    请注意,SQL Server 会进行整数除法,因此要获得分数,您需要转换为某种十进制表示(* 1.0 只是一种简单的方法)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2012-02-29
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多