postgresql - 找出年份的差异
问题描述
我需要找到工作至少 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 $$;
解决方案
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)
推荐阅读
- php - 如何使用php从数组中随机显示DIV
- sql - 将 char 数据类型转换为 datetime 数据类型导致超出范围的 datetime 值
- javascript - 如何选择所有可见的html
- android - 网络提供商位置始终返回 false(已禁用)
- popper.js - Popper-react 离开容器边界
- javascript - HTML 正在显示 [对象,对象]
- c - 第二次调用函数导致分段错误
- python - 结合使用多处理和请求时,是否有更好的方法来避免内存泄漏?
- node.js - 访问与 IntelliJ 2019.2 捆绑的 Node.JS 和 npm
- .net-core - 使用角色 ARN 从 EKS 连接到 SQS