Sql 如何使用Firebird根据生日筛选在两个日期之间过生日的人的记录?
我想在我的数据库中查询那些生日介于开始日期和结束日期之间的人。该字段在数据库中存储有日期,因此需要选择周年,而不考虑年份。我尝试使用提取等功能获取日期和月份,但当开始日期大于最后一天时,不会显示任何记录。有没有人在没有存储过程的情况下对此有解决方案?如果要忽略年份,则需要提取月份和天数,并分别进行比较: 月为起始月,日等于或大于起始日 月份大于开始月份,小于结束月份 月为月底,天小于或等于月底 这将为您提供以下查询:Sql 如何使用Firebird根据生日筛选在两个日期之间过生日的人的记录?,sql,firebird,firebird-3.0,Sql,Firebird,Firebird 3.0,我想在我的数据库中查询那些生日介于开始日期和结束日期之间的人。该字段在数据库中存储有日期,因此需要选择周年,而不考虑年份。我尝试使用提取等功能获取日期和月份,但当开始日期大于最后一天时,不会显示任何记录。有没有人在没有存储过程的情况下对此有解决方案?如果要忽略年份,则需要提取月份和天数,并分别进行比较: 月为起始月,日等于或大于起始日 月份大于开始月份,小于结束月份 月为月底,天小于或等于月底 这将为您提供以下查询: select * from ( select ex
select *
from (
select
extract(month from people.birthdate) as birthmonth,
extract(day from people.birthdate) as birthday,
*
from people) a
where a.birthmonth = :startmonth and a.birthday >= :startday
or a.birthmonth > :startmonth and a.birthmonth < :endmonth
or a.birthmonth = :endmonth and a.birthday <= :endday
请注意,为了清晰起见,我使用了命名参数,即使Firebird本身没有这些参数。除非您的连接库可以为您执行此操作,否则您需要将其替换为位置参数
如果要提供实际的开始和结束日期作为参数,则可能需要做一些额外的工作。如果要忽略年份,则需要提取月份和天数并分别比较: 月为起始月,日等于或大于起始日 月份大于开始月份,小于结束月份 月为月底,天小于或等于月底 这将为您提供以下查询:
select *
from (
select
extract(month from people.birthdate) as birthmonth,
extract(day from people.birthdate) as birthday,
*
from people) a
where a.birthmonth = :startmonth and a.birthday >= :startday
or a.birthmonth > :startmonth and a.birthmonth < :endmonth
or a.birthmonth = :endmonth and a.birthday <= :endday
请注意,为了清晰起见,我使用了命名参数,即使Firebird本身没有这些参数。除非您的连接库可以为您执行此操作,否则您需要将其替换为位置参数
如果您想提供一个实际的开始和结束日期作为参数,那么您可能需要做一些额外的工作