【问题标题】:Number of days in year month年月天数
【发布时间】:2019-08-03 01:13:13
【问题描述】:

我在数据库中的雇员任期为天数。是否有可能以 2 年 5 个月或 2.5 之类的年月形式获得它?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。并定义你所说的月份。
  • 同时提及当前的sql
  • 对于 Postgres:select justify_days(interval '882 day')
  • 2.5 的字面意思是 2 年 5 个月(即 7 年 11 个月是 7.11)还是您正在创建一个认为年有 10 个月的系统?
  • @Cid:OP 可能应该重新考虑这一点。如果需要years.months的点表示法,那么2年5个月可能应该表示为2.05,即月份应该是0.00、0.01、0.02、...、0.10、0.11、0.12。这显然不能解决所有问题(例如 2.07 + 2.08 = 4.15,需要将月份部分归一化才能达到 5.03),但确实是这样。 IMO 不应该有一个包含任期的字段。我建议应该只有一个表示雇用日期的字段,从雇用日期开始根据需要以任何需要的形式计算任期。

标签: sql


【解决方案1】:

正如我正确理解的那样,在 SQL Server 中,您可以通过以下方式实现它:

declare @noOfDays int = 890

select convert(decimal(10,1), datediff(day, dateadd(day, @noOfDays * -1, getdate()), getdate()) / 365.0)

【讨论】:

  • 等待OP标记数据库系统可能会更好,而不是猜测
【解决方案2】:

由于结果被舍入到一位数,因此可以使用忽略闰年的简单算术解决方案

下面是MySql,是整数除法加上小数的提醒

SELECT numberOfDays DIV 365 + ROUND((numberOfDays % 365) / 365, 1)

当然,这会返回一个数字答案,因此 1 年零 6 个月会返回为 1.5

获取小数部分作为月份分数

SELECT numberOfDays DIV 365 + ROUND(1.2 * ((numberOfDays % 365) / 365), 1)

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2014-11-01
    相关资源
    最近更新 更多