SQL(人员共享同一生日,但年龄恰好为100岁或更小)

时间:2019-12-11 15:55:50

标签: sql oracle

我有这张桌子:

$mbutton_click = {
    if ($this.Text -ne "enable") {
        $this.Parent.Controls["label"].Text = "disabled"
        $this.Text = "enable"
    }
    else{
        $this.Parent.Controls["label"].Text = "enabled"
        $this.Text = "disable"
    }
}

我如何获取一个具有相同Dob且年龄恰好等于或小于100岁的人的列表?

预期行:

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之间的差异应为100年

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

另一种可能性是将DOB转换为仅一个月和一天,然后对该分组进行分组以查找大于1的任何事物。换句话说:

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
)

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

编辑:在重读问题和答案时,我不确信自己理解正确。但是我认为这些答案都不是您想要的,因此也许您必须将所有答案结合起来才能得到所需的东西。

答案 2 :(得分:0)

尝试以下操作:

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