首页 > 解决方案 > 找出年份的差异

问题描述

我需要找到工作至少 40 年的人,然后我需要将他们的薪水提高 50%,在此之后我需要显示他们的人名、当前日期和更新的薪水我应该怎么做,我试过但程序给了我一个错误?

CREATE TABLE date_table (PERSONNAME text, JOBNAME text, HRDATE date, SALARY integer);
INSERT INTO date_table VALUES
('NAMEONE', 'JOBONE','23-APR-81', 1000), ('NAMETWO', 'JOBTWO', '16-JUN-81', 1000),
('NAMETHREE', 'JOBTHREE', '15-MAY-81', 1000), ('NAMEFOUR', 'JOBFOUR', '18-JUN-81', 1000),
('NAMEFIVE', 'JOBFIVE', '05-NOV-87', 1000), ('NAMESIX', 'JOBSIX', '28-FEB-81', 1000);

DO $$
DECLARE
answer text;
BEGIN
SELECT date_part ('17-NOV-81',HIREDATE) FROM empno_table;
END $$;

在此处输入图像描述

标签: postgresql

解决方案


Postgres 有一个age()函数将返回其参数和now()
检查年龄是否大于 40 岁之间的间隔:

select age('1981-01-02'::date)> interval '40 years';
 ?column? 
----------
 t
(1 row)

现在在更新语句中使用它:

UPDATE date_table 
SET salary = (salary * 1.5)::integer 
WHERE age(hrdate)> interval '40 years';

检查结果:

select * from date_table;
 personname | jobname  |   hrdate   | salary 
------------+----------+------------+--------
 NAMEONE    | JOBONE   | 1981-04-23 |   1000
 NAMETWO    | JOBTWO   | 1981-06-16 |   1000
 NAMETHREE  | JOBTHREE | 1981-05-15 |   1000
 NAMEFOUR   | JOBFOUR  | 1981-06-18 |   1000
 NAMEFIVE   | JOBFIVE  | 1987-11-05 |   1000
 NAMESIX    | JOBSIX   | 1981-02-28 |   1500
(6 rows)

推荐阅读