我有这个表:
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 是日期数据类型,建议使用TRUNC
和ADD_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 ;