SQL(人们的生日相同,但他们正好大 100 岁或更小)

  • 本文关键字:他们 生日 SQL sql oracle
  • 更新时间 :
  • 英文 :


我有这个表:

name     dob
Peter  1914-07-23
John   1990-03-25
Sandra 2014-07-23
Sam    1911-01-01
Jane   2011-01-01
Tom    2017-01-01

如何获取具有相同 dob 且年龄正好大或更年轻的人名单?

预期行:

name   dob
Peter  1914-07-23
Sandra 2014-07-23
Sam    1911-01-01
Jane   2011-01-01

dob 之间的差异应该是 100 年

如果 DOB 是日期数据类型,建议使用TRUNCADD_MONTHS

SELECT a.name
FROM my_table a,
my_table b
WHERE TRUNC(a.dob) = TRUNC(ADD_MONTHS(b.dob, 100*12))

另一种可能性是将 DOB 转换为仅月份和日期,然后按该数字进行分组以查找任何大于 1 的 DOB。换句话说:

select to_char(dob, 'MM-DD') as birthday
from mytable
group by to_char(dob, 'MM-DD')
having count(*) > 1

这应该给你所有的欺骗。然后,您可以向每个生日之一的人询问:

select name, dob
from mytable
where to_char(dob, 'MM-DD') in (
select to_char(dob, 'MM-DD') as birthday
from mytable
group by to_char(dob, 'MM-DD')
having count(*) > 1
)

它可能不是最快的,但对我来说似乎是最直观的。

编辑:在重读问题和答案时,我不相信我理解正确。但我认为这些答案都不完全是你想要的,所以也许你必须将它们结合起来才能得到你需要的东西。

尝试以下操作:

select * from persons where MONTH(dob) = 07 and Day(dob) = 23 ;

相关内容

最新更新