【问题标题】:Compare two dates and get difference in exact days, months, years, and more SQL Server 2008 R2比较两个日期并获得确切的日期、月份、年份等的差异 SQL Server 2008 R2
【发布时间】:2018-10-10 18:59:45
【问题描述】:

我在 SQL Server 中比较两个日期,需要以精确的方式提供以下信息:

输入:

Start Date = 12/28/2015
End Date   = 12/25/2020

返回的结果(每个部分在不同的列):

  1. 天数 = 1825(计算中包括开始/结束日期)
  2. 年 = 4
  3. 月 = 11
  4. 天 = 28
  5. 开始月份有多少天 = 31 天(因为是 12 月)
  6. 开始月份的入住人数 =(因为 12 月有 31 天,所以应该是 4/31)= .12903225806
  7. 末月有多少天 = 31 天(因为是 12 月)
  8. 月底入住人数 =(因为 12 月有 31 天,所以应该是 25/31)= .8064516129

【问题讨论】:

  • 那么问题出在哪里?你试过什么?所以不是免费的代码服务。当您遇到困难时,我们会提供帮助。现在你还没有表现出任何努力。这些是您可以找到的基本时间计算方法SQL day difference between 2 dates
  • 在第 3 点。您如何获得 11 个月?点 4. 你怎么得到 28 天?在第 6 点。4/31 来自哪里?
  • @SalmanA 那应该是 2 天。

标签: sql-server function date date-difference


【解决方案1】:

对于1-3,您可以查看https://www.w3schools.com/sql/func_sqlserver_datediff.asp。这相当简单,您只需使用datediff 并指定感兴趣的单位即可。

对于 4,您可以简单地使用 day(Start Date) 来获取日期。

对于 5 和 7,您可以使用: SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@myDate)+1,0) 获取给定日期的月末日期并使用day() 获取日期时间对象的日期部分。

对于 6 和 8,这只是简单的数学运算,您可以从 5 和 7 获得该月的月份数,然后,如果是开始日期,则为 (day(eom(Start Date)) - day(Start Date) + 1) / day(eom(date),如果是结束日期,则为 day(End Date) / day(eom(End Date))

我没有给你完整的代码,因为除了我之外我没有运行 SQL 服务器。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多