我有一張如下表
| 姓名 | 出生日期 |
|---|---|
| 約翰 | 1980-10-25 |
| 麥克風 | 1975-09-17 |
| 吉爾 | 1987-01-13 |
| 安妮 | 1999-02-01 |
今天的日期是 2022-02-22。
我將如何撰寫一個回傳姓名和上次生日發生時間的 sql 查詢?如果他們今年的生日已經過,則從 2022 年的同一天和同一月開始;如果今年沒有生日,則從 2021 年開始
示例回應將是
| 姓名 | last_birthdate |
|---|---|
| 約翰 | 2022-10-25 |
| 麥克風 | 2022-09-17 |
| 吉爾 | 2021-01-13 |
| 安妮 | 2021-02-01 |
uj5u.com熱心網友回復:
使用日期算術:
SELECT name,
birthdate EXTRACT (year FROM
age(current_timestamp, birthdate)
) AS last_birthday
FROM tab;
uj5u.com熱心網友回復:
您可以使用條件:
select name, case when date(extract(year from now())||regexp_replace(birthdate::text, '^\d ', '')) < date(now()) then extract(year from now())-1||regexp_replace(birthdate::text, '^\d ', '') else extract(year from now())||regexp_replace(birthdate::text, '^\d ', '') end from people
uj5u.com熱心網友回復:
select
name,
case
when
birthdate concat(extract(YEAR from now()) - extract(YEAR FROM birthdate), ' years')::interval > now()
then
birthdate concat(extract(YEAR from now()) - extract(YEAR FROM birthdate) - 1, ' years')::interval
else
birthdate concat(extract(YEAR from now()) - extract(YEAR FROM birthdate), ' years')::interval
end as last_birthdate
from tab
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431090.html
標籤:sql PostgreSQL
上一篇:使用WITH作為聚合值
