首页 > 数据库 > 数据库开发技术 > SQL案例分析:计算退休年龄

-- PostgreSQL实现
WITH person_info(category, birthday) AS ( -- 输入个人信息
SELECT '男职工', '1985-01-01'::date
),
original_retirement AS ( -- 改革前退休时间
SELECT CASE category
WHEN '男职工' THEN birthday + INTERVAL '60 year'
WHEN '女干部' THEN birthday + INTERVAL '55 year'
WHEN '女员工' THEN birthday + INTERVAL '50 year'
END retirement_age
FROM person_info
),
delay_month(n) AS ( -- 延迟月数
SELECT CASE category
WHEN '男职工' THEN LEAST(36, 1+(EXTRACT(year FROM age(birthday,'1965-01-01'::date))*12 + EXTRACT(month FROM age(birthday,'1965-01-01'::date)))::int/4)
WHEN '女干部' THEN LEAST(36, 1+(EXTRACT(year FROM age(birthday,'1970-01-01'::date))*12 + EXTRACT(month FROM age(birthday,'1970-01-01'::date)))::int/4)
WHEN '女员工' THEN LEAST(50, 1+(EXTRACT(year FROM age(birthday,'1975-01-01'::date))*12 + EXTRACT(month FROM age(birthday,'1975-01-01'::date)))::int/2)
END
FROM person_info
)
SELECT category "员工类型",
birthday "出生日期",
retirement_age "原始退休时间",
n "延迟月数",
retirement_age + make_interval(0, n) AS "改革后退休时间"
FROM person_info, original_retirement, delay_month;
员工类型|出生日期 |原始退休时间 |延迟月数|改革后退休时间 |
-------+----------+-----------------------+------+-----------------------+
男职工 |1985-01-01|2045-01-01 00:00:00.000| 36|2048-01-01 00:00:00.000|
原文作者:SQL编程思想;如有侵权,请联系管理员删除。