我想在我的数据库中查询在开始日期和结束日期之间有生日的人。该字段与Date一起存储在数据库中,因此需要选择不考虑年份的anerserver。我尝试使用提取等功能来获取日期和月份,但是当开始日期大于最后一天时,不会显示任何记录。没有存储过程,有没有人有这个解决方案?
答案 0 :(得分:2)
如果您想忽略年份,则需要提取月份和日期并单独进行比较:
这会给你这个问题:
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本身没有它们。您需要将其替换为位置参数,除非您的连接库可以为您执行此操作。
如果您想提供实际的开始和结束日期作为参数,那么您可能需要做一些额外的工作。