如何在IBM DataStage中基于DOB计算精确年龄?
在IBM DataStage Transformer中计算精确年龄的方法
你之前的表达式仅通过年份差计算年龄,没有考虑当年生日是否已经过了,所以会出现误差(比如当前日期在生日之前时,年龄会多算1岁)。可以通过以下DataStage内置函数组合实现精确年龄计算:
方法1:直接在Transformer表达式中计算
使用日期拆解后的月日数值对比,判断是否需要修正年份差:
YearFromDate(CurrentDate()) - YearFromDate(StringToDate(Link_4.DOB, "%yyyy%mm%dd")) - If (MonthFromDate(CurrentDate()) * 100 + DayFromDate(CurrentDate())) < (MonthFromDate(StringToDate(Link_4.DOB, "%yyyy%mm%dd")) * 100 + DayFromDate(StringToDate(Link_4.DOB, "%yyyy%mm%dd"))) Then 1 Else 0
方法2:使用Stage Variable优化(推荐)
为了避免重复执行StringToDate转换,先在Transformer的Stage Variables中定义变量:
sv_DOB = StringToDate(Link_4.DOB, "%yyyy%mm%dd")
然后在输出列的表达式中引用该变量:
YearFromDate(CurrentDate()) - YearFromDate(sv_DOB) - If (MonthFromDate(CurrentDate()) * 100 + DayFromDate(CurrentDate())) < (MonthFromDate(sv_DOB) * 100 + DayFromDate(sv_DOB)) Then 1 Else 0
逻辑说明
- 先将字符串格式的
Link_4.DOB转换为DataStage日期类型 - 计算当前年份与出生年份的差值
- 将当前日期和出生日期的「月+日」转换为四位数数值(例如12月21日转为1221),如果当前的月日数值小于出生的月日数值,说明今年生日还未过,需要将年份差减1,得到精确年龄
内容的提问来源于stack exchange,提问作者william007
相关产品推荐
相关产品推荐

