墨痕淡去 2022-03-18 11:37 采纳率: 50%
浏览 18
已结题

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

从数据库获取多个字段的数据,其中有某一个字段的数据是代表的年龄。
比如获取的数据:
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可以进行实现吗

  • 写回答

1条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-18 15:34
    关注

    其实就用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个月,你得按照原始数据的定义来进行处理,不能自己去想象它是什么东西

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥15 悬赏Python-playwright部署在centos7上