SQL查询适用于今天年满18岁的人

时间:2014-03-18 11:40:58

标签: sql sql-server

我是SQL新手,我正在尝试编写一个查询,根据当前日期(今天)返回已满18岁的联系人。我考虑过下面的查询,但我不确定如何添加“和今天等于今天”的部分。

我很欣赏我可能会让它变得比它需要的更复杂。

    SELECT date_of_birth 
    FROM contacts
    WHERE ((DATEDIFF(Year,date_of_birth,GETDATE())>'17') AND 
(DATEDIFF(Year,date_of_birth,GETDATE())<'19')) 

date_of_birth大于17但小于19

4 个答案:

答案 0 :(得分:0)

尝试使用DATEADD。您可以使用负数来减去。

http://technet.microsoft.com/en-us/library/ms186819.aspx

答案 1 :(得分:0)

如果您的date_of_birth字段仅以日期格式存储,则只需添加18年,即可与今天的日期进行比较。

DATEADD(YEAR,18,date_of_birth) = CONVERT(DATE,GETDATE())

由于GETDATE()获得DATETIME结果,您只需将其转换为DATE

以下是测试逻辑的示例代码。

DECLARE @date_of_birth DATE = '03/18/1996'

SELECT CASE WHEN DATEADD(YEAR, 18, @date_of_birth) = CONVERT(DATE, GETDATE()) THEN 'TRUE'
            ELSE 'FALSE'
       END

如果你想让所有18岁的人知道他们已经年满18岁但尚未满19岁,你可以使用DATEDIFF,在下面的测试中,在第一个select语句中,两列都将返回{{ 1}}但在我将DOB更改为'TRUE'后,第二个选择中的第二个案例返回'3/17/1996'

'TRUE'

答案 2 :(得分:0)

考虑到年份不会取得正确的结果,你也需要考虑日和月。看看这个,我们已经在我们的应用程序中使用了这个:

SELECT date_of_birth 
    FROM contacts
    WHERE (FLOOR(DATEDIFF(DAY, date_of_birth,GETDATE()) / 365.25) between 17 and 18 

答案 3 :(得分:0)

您可以尝试这种简单的查询,而不是使用两个条件:

Select date_of_birth from contacts
where datediff(yy,date_of_birth,getdate()) = 18