在postgreSQL中使用从日期算起的月日,将所有员工的经验增加1
我们拥有所有员工的DOJ(加入日期),我们需要将所有员工的经验增加到“1”。我们必须考虑<强>“SysDead”和“SysDe+7天(星期)”< /强>作为条件。 如果有人在那一周跌倒,他的经验应该增加,而只考虑“月和日”,忽略从日期算起的年份 假设:-在postgreSQL中使用从日期算起的月日,将所有员工的经验增加1,sql,postgresql,date,Sql,Postgresql,Date,我们拥有所有员工的DOJ(加入日期),我们需要将所有员工的经验增加到“1”。我们必须考虑“SysDead”和“SysDe+7天(星期)”< /强>作为条件。 如果有人在那一周跌倒,他的经验应该增加,而只考虑“月和日”,忽略从日期算起的年份 假设:- date=20-08-2015,我们必须从忽略年份的所有日期中选择20-08(dd-mm)到26-08(dd-mm)的所有记录 预期结果可能是一个有经验的虚拟列 提前谢谢 select workername, workerobj
date=20-08-2015
,我们必须从忽略年份的所有日期中选择20-08(dd-mm)到26-08(dd-mm)的所有记录
预期结果可能是一个有经验的虚拟列
提前谢谢
select
workername,
workerobj,
DATE_PART('year', current_date) - DATE_PART('year', workerobj) + 1 experience
from emp_tbl
where
to_date(to_char(workerobj, 'DD-MM'), 'DD-MM')
between
to_date(to_char(current_date, 'DD-MM'), 'DD-MM') and
to_date(to_char(current_date + 7, 'DD-MM'), 'DD-MM')
to_char(DOJ,'DD-MM')
将从DOJ
to_date(to_char(DOJ,'DD-MM'),'DD-MM')
将通过添加0001
作为年份来创建一个日期。(实际年份将被忽略)好的,这是一个真正的野兽,所以首先是肉,然后是牙签:
WITH chk AS (
SELECT to_timestamp('12-28', 'MM-DD') AS dt
), doj_doy AS (
SELECT workername, workerdoj, extract('doy' from workerdoj) AS doy
FROM my_table
), date_tails AS (
-- Get the MM/DD in year 0
SELECT workername, workerdoj,
(workerdoj - extract('year' from workerdoj) * interval '1 year') AS date0
FROM doj_doy
UNION
-- Add DOJ early in the year (year +1)
SELECT workername, workerdoj,
(workerdoj - (extract('year' from workerdoj) - 1) * interval '1 year') AS date0
FROM doj_doy
WHERE doy < 8
)
SELECT workername, workerdoj
FROM date_tails, chk
WHERE date0 BETWEEN dt AND dt + interval '6 days';
这就给我们留下了0年的时间戳
值。该结果在1月的第一周对那些司法部进行了UNION
ed,当时doy<8
,其中doy
已在DOJ\u-doy
CTE中计算。这样可以确保在进行圣诞后搜索时包含1月初的美国司法部
在第一个CTE中,您必须指定要搜索的年份日期,然后您就可以开始了。如果您想通过
current_date
或其他timestamp
值来执行此操作,那么您也应该将其转换为0年日期。您可以添加一些示例数据(包括不应该更新的行)以及基于该示例数据的预期结果吗。@a_horse_没有名称,我已经更新了问题。谢谢:)我们需要在一个虚拟列的Select语句中获取它,我已经更新了问题,请检查它。我很感谢你的努力,兄弟:)这张桌子有没有列经验
。?在sysdate和dojNo之间,我们必须使用一个使用SELECT语句的伪列。它正在计算所有不在20-08(dd-mm)到26-08(dd-mm)到字符(当前日期+7,'dd-mm')之间的记录将给出<代码> 06-08/COD> >如果代码> CurrnalDeals是代码> 30-07XXXX谢谢帕特里克的努力,但是我们也要考虑闰年。
(workerdoj - extract('year' from workerdoj) * interval '1 year') AS date0