我正在从事甲骨文数据库系统的工作,我必须这样做:所有员工都根据其雇用日期获得加薪,具体如下:(使用一条SQL语句)如果雇员在2001年后被雇用,则加薪10%。如果雇员在1997至2000年间被雇用,工资将增加7%。如果雇员在1996年之前被雇用,则增加4%的工资。
我使用了以下代码
update employee set salary = case
when hire_date>'1-1-2001' then salary=salary+salary*0.1
when hire_date between ('1-1-1997','1-1-2000') then salary=salary+salary*0.07
when hire_date < '1-1-1996' then salary=salary+salary*0.04
end这是怎么回事??
发布于 2014-01-19 14:11:47
尝试:
update stackoverflow_employee set salary = case
when hire_date>'1-Jan-2001' then salary+salary*0.1
when hire_date between ('1-Jan-1997') AND ('1-Jan-2000') then salary+salary*0.07
when hire_date < '1-Jan-1996' then salary+salary*0.04
end要记住的要点:
希望现在您的查询正在工作:)
发布于 2014-01-19 16:17:18
我会把它写成:
update employee
set salary = (salary * (case when hire_date >= '2001-01-01' then 1.10
when hire_date >= '1997-01-01' then 1.07
else 1.04
end)
);这解决了salary =和funky between子句的明显问题。它还会进入case语句,这是只需要存在的逻辑--增加的数量。Tt通过利用between语句返回第一个匹配的事实来删除case。最后,采用ISO标准的日期格式。
https://stackoverflow.com/questions/21217614
复制相似问题