sql - 如果年龄超过 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;
非常感谢您的帮助。
解决方案
问题实际上是关于如何在 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
推荐阅读
- python - 在嵌套字典中将多个相同的键合并为一个
- ios - UIButton 宽度的自动布局问题
- dtrace - DTrace pid 提供程序是否仅适用于调试模式编译的程序?
- angular - 更改所有(背景、侧边栏、组件等)NGX-ADMIN 提供的深色主题的背景颜色
- php - 隐藏值未在表单操作中传递
- python - 相对导入和目录结构(万亿次)
- amazon-s3 - 使用 Cloudflare 的 S3 托管网站为任何路由返回 404 状态代码
- google-analytics - 在 Reporting API V4 中,使用(或不使用)分段“所有用户”的不同结果
- sql - 如何在同一行显示手机号码和旧数据的最后状态?使用 SQL
- python - 如何在 pytorch MNIST 数据集中选择特定标签