首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出这些年的不同

找出这些年的不同
EN

Stack Overflow用户
提问于 2021-03-02 14:16:52
回答 2查看 49关注 0票数 0

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

代码语言:javascript
复制
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 $$;

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-02 15:17:07

Postgres有一个age()函数,它将返回其参数与now()之间的间隔。

检查年龄是否> 40岁:

代码语言:javascript
复制
select age('1981-01-02'::date)> interval '40 years';
 ?column? 
----------
 t
(1 row)

现在,在update语句中使用此方法:

代码语言:javascript
复制
UPDATE date_table 
SET salary = (salary * 1.5)::integer 
WHERE age(hrdate)> interval '40 years';

核对结果:

代码语言:javascript
复制
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)
票数 4
EN

Stack Overflow用户

发布于 2021-03-02 15:00:54

select语句存在一些问题,导致错误消息:

  • empno_table不存在于您posted
  • date_part获取的两个参数的范围中: 1)您想要显示的日期的部分(在您的例子中是year);2) date或date column
  • HIREDATE不是示例中的现有列。会是HRDATE.

考虑到这一点,下面的select语句将工作:

代码语言:javascript
复制
SELECT date_part('year', HRDATE::date) FROM date_table;

现在,如果要将此日期与当前日期进行比较,可以使用如下所示的now()

代码语言:javascript
复制
SELECT date_part('year', now()::date) - date_part('year', HRDATE::date) FROM date_table;

这将给出在公司工作超过40年的人的名单:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66441126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档