首页 > 解决方案 > 如果年龄超过 18 岁,则保存客户记录

问题描述

我想创建一个函数,它通过条目检查记录的年龄。如果年龄超过 18 岁,则保存记录。如果没有,请不要保存记录。

create function f_Over18 (@age date)
returns char (20)

as begin 
    --declare @returnOne int
    declare @date int
    set @date= year(getdate()) - year(@age)
    if (@date > 17)
        begin 
            print ('Age verified') --this is only an example but i want, that safes the record
        end
    else
        begin
            print ('Age not verified')
        end;
end;

非常感谢您的帮助。

标签: sqlsql-serverdateselectsql-function

解决方案


问题实际上是关于如何在 SQL Server 中从出生日期计算年龄。这并不容易,因为没有内置的,因为诸如此类的函数datediff()不能真正给出准确的结果(或者至少没有很多卷积)。

一种简单有效的方法是将出生日期和当前日期转换为 format YYYYMMDD,将其转换为字符串,然后使用简单的算术运算,如下所示:

(convert(int, convert(char(8), getdate(), 112)) - convert(char(8), @dob, 112)) / 10000

在您的功能中:

create function f_Over18 (@dob date)
returns nvarchar (20)
as begin 
    declare @age int;
    declare @res nvarchar(20);
    set @age= 
        (convert(int, convert(char(8), getdate(), 112)) - convert(char(8), @dob, 112)) 
        / 10000;

    if (@age > 17)
        begin 
            set @res = 'Age verified';
        end
    else
        begin
            set @res = 'Age not verified';
        end;

    return concat(@res, ': ', @age);
end;

我稍微修改了原始代码,使其正确编译,并返回计算日期(这使得调试变得容易)。

现在我们可以测试

出生日期 | 资源                 
:--------- | :--------------------
2000-01-01 | 验证年龄:20    
2002-06-11 | 已验证年龄:18    
2002-06-13 | 年龄未验证:17
2010-01-01 | 年龄未验证:10

推荐阅读