关于数据库某一个字段调整为年龄的某一类格式

从数据库获取多个字段的数据,其中有某一个字段的数据是代表的年龄。
比如获取的数据:
name age no
A 0.5 1
B 2.4 2
C 12.0 3
D 18.5 4
E 22.7 5
设置一个规则:14及以上的就显示多少岁,不满14的就显示几岁零几个月,不满1的就显示几个月
想得到这样的:
A 五个月
B 2岁零4个月
C 12岁
D 18岁
E 22岁

也可以再获取name对应的出生年月日
这种用SQL可以进行实现吗

其实就用case when 判断一下再拼个字符串就好了,重点是age的字段类型是什么,不同的字段类型判断处理方式不一样.
假设age是字符串类型

select name,
case when cast(age as NUMERIC(5,2))>=14 then cast(floor(age) as VARCHAR) +' sui' 
else cast(floor(age) as VARCHAR)+' nian ling '+substring(age,CHARINDEX('.',age)+1,2)+' yue' end age from t 

img


如果是数值类型,做需要转换成字符串类型再来做截取了,但是,你不觉得这题奇怪么?
0.5表示5个月,
0.4表示4个月,
那么10个月应该如何表示?是1.0还是0.1还是0.10?
显然不可能是1.0,然后0.10其实就是0.1,那此时1个月该如何表示??
NUMERIC类型里,必须统一小数位精度,按照你题目上的这个转换规则,就是无解了


小数点后0-9不一定就是表示的月份啊,它可能是0.5表示0.5年,即表示6个月,你得按照原始数据的定义来进行处理,不能自己去想象它是什么东西