我需要找到工作至少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 $$;

发布于 2021-03-02 15:17:07
Postgres有一个age()函数,它将返回其参数与now()之间的间隔。
检查年龄是否> 40岁:
select age('1981-01-02'::date)> interval '40 years';
?column?
----------
t
(1 row)现在,在update语句中使用此方法:
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)发布于 2021-03-02 15:00:54
select语句存在一些问题,导致错误消息:
empno_table不存在于您posteddate_part获取的两个参数的范围中: 1)您想要显示的日期的部分(在您的例子中是year);2) date或date columnHIREDATE不是示例中的现有列。会是HRDATE.考虑到这一点,下面的select语句将工作:
SELECT date_part('year', HRDATE::date) FROM date_table;现在,如果要将此日期与当前日期进行比较,可以使用如下所示的now():
SELECT date_part('year', now()::date) - date_part('year', HRDATE::date) FROM date_table;这将给出在公司工作超过40年的人的名单:
select * from (
select *, date_part('year', now()::date) - date_part('year', HRDATE::date) as "YEARS_IN_COMPANY"
from date_table
) as date_table_with_years_in_company
where "YEARS_IN_COMPANY" >= 40;https://stackoverflow.com/questions/66441126
复制相似问题