我是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
答案 0 :(得分:0)
尝试使用DATEADD。您可以使用负数来减去。
答案 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