【发布时间】:2019-07-31 13:08:28
【问题描述】:
我需要从员工雇用日期中减去几个月
员工入职日期 = 2018 年 8 月 12 日
以前的经验 = 0.92(即 11 个月)
我想要像这样的计算
入职日期 - 以前的经验 = 新入职日期
这个有什么功能吗?
【问题讨论】:
标签: sql oracle date difference
我需要从员工雇用日期中减去几个月
员工入职日期 = 2018 年 8 月 12 日
以前的经验 = 0.92(即 11 个月)
我想要像这样的计算
入职日期 - 以前的经验 = 新入职日期
这个有什么功能吗?
【问题讨论】:
标签: sql oracle date difference
您正在使用add_months 函数。
这接受两个参数:日期和您尝试添加的月数。
如果您将负数作为第二个参数传入,您将减去月份。
例如:
select to_date('23/07/2019', 'dd/mm/yyyy') dt,
add_months(to_date('23/07/2019', 'dd/mm/yyyy'), -1) prev_month_dt
FROM dual;
DT PREV_MONTH_DT
----------- -------------
23/07/2019 23/06/2019
【讨论】:
to_date 将字符串转换为日期;相反,您的字符串正在使用您的 NLS_DATE_FORMAT 参数作为格式掩码进行隐式转换,这可能就是您得到错误年份的原因。你想要select to_char(add_months(to_date('10/12/2018', 'dd/mm/yyyy'), - 9.2 * 12), 'dd/mm/yyyy') from dual; 如果你传递给 add_months 的值已经是 DATE 数据类型(例如你传递一个变量或列名),你不需要将它转换为日期,因为它已经在正确的数据类型。
date '2018-12-10'
您可以尝试从雇用日期中减去那么多天:
SELECT
date_hire,
date_hire - 365*exp AS hire_date_new
FROM yourTable;
这假设一年是 365 天,这并不严格,因为闰年有 366 天。希望您不会介意提前或稍晚雇用某人。
【讨论】:
:-) ...我建议从雇用日期中减去天数。
您可以使用add_months() 添加一年的小数部分:
select add_months(hiredate, - prev_exp * 12)
或转换为天数:
select hiredate - 365 * prev_exp
【讨论】:
date '2018-10-12'。