如果年龄大于 18 岁,则保存客户记录
If the age is older than 18, then save the Customer record
我想创建一个函数,通过条目记录检查年龄。如果年龄大于 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;
非常感谢您的帮助。
真正的问题是如何根据 SQL 服务器中的出生日期计算年龄。这不是那么容易,因为没有内置的,并且因为像 datediff()
这样的函数不能真正给出准确的结果(或者至少在没有很多卷积的情况下)。
一个简单有效的方法是将出生日期和当前日期转换为格式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;
我稍微修改了原始代码以使其正确编译,returns 计算日期也是如此(这使得调试变得容易)。
现在we can test:
dob | res
:--------- | :-------------------
2000-01-01 | Age verified: 20
2002-06-11 | Age verified: 18
2002-06-13 | Age not verified: 17
2010-01-01 | Age not verified: 10
我想创建一个函数,通过条目记录检查年龄。如果年龄大于 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;
非常感谢您的帮助。
真正的问题是如何根据 SQL 服务器中的出生日期计算年龄。这不是那么容易,因为没有内置的,并且因为像 datediff()
这样的函数不能真正给出准确的结果(或者至少在没有很多卷积的情况下)。
一个简单有效的方法是将出生日期和当前日期转换为格式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;
我稍微修改了原始代码以使其正确编译,returns 计算日期也是如此(这使得调试变得容易)。
现在we can test:
dob | res :--------- | :------------------- 2000-01-01 | Age verified: 20 2002-06-11 | Age verified: 18 2002-06-13 | Age not verified: 17 2010-01-01 | Age not verified: 10