gpt4 book ai didi

sql - 检查生日是否在跨越年假的 6 个月之间

转载 作者:行者123 更新时间:2023-12-05 00:26:54 25 4
gpt4 key购买 nike

我正在尝试编写 SQL 代码(使用 SQL Developer)来检查一个人是否在过去 6 个月的保险期限内过生日。

这是我的代码目前的样子。

SELECT DRIVER_KEY, CASE WHEN BDAY BETWEEN EFFDAY AND EXPDAY THEN 1 ELSE 0 END AS BDAYIND FROM (
SELECT DISTINCT A.DRIVER_KEY
, TO_CHAR(A.BIRTH_DATE,'mm/dd') AS BDAY
, TO_CHAR(SUBSTR(A.EFFECTIVE_DATE_KEY,5,2)||'/'||SUBSTR(A.EFFECTIVE_DATE_KEY,7,2) ) AS EFFDAY
, TO_CHAR(SUBSTR(A.EXPIRATION_DATE_KEY,5,2)||'/'||SUBSTR(A.EXPIRATION_DATE_KEY,7,2) ) AS EXPDAY
FROM DRIVER_TABLE A
);

它有效 - 只要术语不跨越年份的中断。但是,我的代码目前表示 01/25 不在 09/19 和 03/19 之间......我该如何解决这个问题?

最佳答案

编辑: 正如 APC 所指出的,我的解决方案不适用于闰年。我通常会删除这篇文章,但它已经被选为问题的答案。我更新了下面的代码以使用 Brian Leach 解决方案中的年份逻辑而不是 to_date 字符串。请改为投票给 Brian 或 APC 的答案。

这是我的任意日期的创建语句:

create table DRIVER_TABLE
(
BIRTH_DATE date,
EFFECTIVE_DATE_KEY date,
EXPIRATION_DATE_KEY date
);

insert into DRIVER_TABLE
values(to_date('05/01/1980','MM/DD/YYYY'),
to_date('11/01/2016','MM/DD/YYYY'),
to_date('04/01/2017','MM/DD/YYYY'));

这里是查询:

select case when BirthdayEFFYear between EFFECTIVE_DATE_KEY and EXPIRATION_DATE_KEY 
or BirthdayEXPYear between EFFECTIVE_DATE_KEY and EXPIRATION_DATE_KEY
or to_number(EXPIRATION_DATE_KEY - EFFECTIVE_DATE_KEY) / 365 > 1
then 1 else 0 end BDAYIND
from(
select add_months(BIRTH_DATE,12 * (extract(year from EFFECTIVE_DATE_KEY) - extract(year from BIRTH_DATE))) BirthdayEFFYear,
add_months(BIRTH_DATE,12 * (extract(year from EXPIRATION_DATE_KEY) - extract(year from BIRTH_DATE))) BirthdayEXPYear,
EFFECTIVE_DATE_KEY,EXPIRATION_DATE_KEY
from DRIVER_TABLE A
)

SQLFiddle

关于sql - 检查生日是否在跨越年假的 6 个月之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45492330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com