Foxtable(狐表)用户栏目专家坐堂 → 关于年龄的计算


  共有2982人关注过本帖树形打印复制链接

主题:关于年龄的计算

帅哥哟,离线,有人找我吗?
fvcfox
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:505 积分:4697 威望:0 精华:0 注册:2020/5/7 13:05:00
关于年龄的计算  发帖心情 Post By:2021/12/2 9:37:00 [只看该作者]

请问下列代码怎样通过SQL后台实现,写到哪?
Dim tp As TimeSpan = Date.today - CDate(e.DataRow("出生日期"))
e.DataRow("年龄") = Math.Round(tp.TotalDays / 365.2422,2)

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/2 9:47:00 [只看该作者]

access
select int(datediff("d",出生日期,now())/365.25) as 年龄 from {表C}

SqlServer
select FLOOR(datediff(DY,出生日期,getdate())/365.25) as 年龄 from {表C}

 回到顶部
帅哥哟,离线,有人找我吗?
fvcfox
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:505 积分:4697 威望:0 精华:0 注册:2020/5/7 13:05:00
  发帖心情 Post By:2021/12/2 10:58:00 [只看该作者]

我想用sqlreplace来做,代码有误,不知怎改
DataTables("员工信息").SQLReplaceFor("年龄",Select FLOOR(datediff(DY,出生日期,getdate())/365.25) As 年龄)
[此贴子已经被作者于2021/12/2 10:59:25编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/2 11:20:00 [只看该作者]


DataTables("员工信息").SQLReplaceFor("年龄","FLOOR(datediff(DY,出生日期,getdate())/365.25)",true)

 回到顶部
帅哥哟,离线,有人找我吗?
fvcfox
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:505 积分:4697 威望:0 精华:0 注册:2020/5/7 13:05:00
  发帖心情 Post By:2021/12/2 11:28:00 [只看该作者]

会出错

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20211202112700.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
fvcfox
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:505 积分:4697 威望:0 精华:0 注册:2020/5/7 13:05:00
  发帖心情 Post By:2021/12/2 11:35:00 [只看该作者]

改成DataTables("员工信息").SQLReplaceFor("年龄","FLOOR(datediff(DY,出生日期,getdate())/365.25)",,True)可以计算了

 回到顶部
帅哥哟,离线,有人找我吗?
fvcfox
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:505 积分:4697 威望:0 精华:0 注册:2020/5/7 13:05:00
  发帖心情 Post By:2021/12/2 11:46:00 [只看该作者]

但1964-03-02这日期e.DataRow("年龄") = Math.Round(tp.TotalDays / 365.2422,2)是58,而
DataTables("员工信息").SQLReplaceFor("年龄","FLOOR(datediff(DY,出生日期,getdate())/365.25)",,True)算出来的是57
从现在月份来看应该58才对
[此贴子已经被作者于2021/12/2 11:57:03编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/2 12:00:00 [只看该作者]


[此贴子已经被作者于2021/12/2 12:00:19编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/2 12:04:00 [只看该作者]

FLOOR是向下取整的,可以改为ROUND

 回到顶部
帅哥哟,离线,有人找我吗?
fvcfox
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:505 积分:4697 威望:0 精华:0 注册:2020/5/7 13:05:00
  发帖心情 Post By:2021/12/2 14:23:00 [只看该作者]

改成
DataTables("员工信息").SQLReplaceFor("年龄","ROUND(datediff(DY,出生日期,getdate())/365.25,0)",,True)
后还是有问题
,1979-12-17 和 1979-11-16 计算的结果都是42,今天是12月2号,按道理不应该都是42,请问是什么问题
[此贴子已经被作者于2021/12/2 14:32:55编辑过]

 回到顶部
总数 11 1 2 下一页