已知病人出生日期,精确求出该病人年龄。单条ORACLE语句。

一品梅 2016-09-07 08:52:57
select * from v_jianchasqd
数据表各字段我导出为XML格式大家看看。:
<?xml version="1.0" ?>
<ROWDATA>

<ROW>
<C0>1</C0>
<SQDH>1000053992</SQDH>
<ZYHM></ZYHM>
<MZHM>10003</MZHM>
<BRLX>1</BRLX>
<SBBH></SBBH>
<FYXZID>XJ01</FYXZID>
<FYXZMC>自费</FYXZMC>
<BRZYID>10003</BRZYID>
<BRXM>门诊03</BRXM>
<BRXB>男</BRXB>
<CSRQ>1991-01-01</CSRQ>
<SFZH></SFZH>
<LXDH></LXDH>
<BRCH></BRCH>
<LXDZ></LXDZ>
<MZ>汉族</MZ>
<GJ>中国</GJ>
<SQYY>内乡县人民医院</SQYY>
<SQKS>急诊科</SQKS>
<SQYS>超级用户</SQYS>
<ZXKS>00040</ZXKS>
<JCSBLX>2</JCSBLX>
<SQSJ>2016-08-03 15:20:32</SQSJ>
<ZXSJ></ZXSJ>
<JCXM>16排CT头部平扫</JCXM>
<JCBW>颅脑</JCBW>
<ZS>咳嗽发烧三日</ZS>
<BS>发烧</BS>
<FZJC></FZJC>
<LCZD>感冒</LCZD>
<JCFY>280.0000</JCFY>
<SFJF>1</SFJF>
<SFQR>0</SFQR>
</ROW>

各位大大请教个问题。就是出生日期字段已有,求年龄。满周岁的用几岁,不满周岁的用几个月,不满月的用几天来表示年龄,用一条sql语句,不用函数。

年龄字段可能形式:32岁,5个月,15天
...全文
288 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
一品梅 2016-09-07
  • 打赏
  • 举报
回复
可以了,谢谢大家,结贴。
js14982 2016-09-07
  • 打赏
  • 举报
回复
引用 2 楼 only_endure 的回复:
楼上的大大,只用一条oracle语句。最好用case when then else 我写了一个,它报语法错误,你帮我看看。
select brxm,brxb,
Case when floor(months_between(sysdate,csrq)/ 12)<1 then floor(months_between(sysdate,csrq)+N'月 else floor(months_between(sysdate,csrq)/ 12)+N'年' End;  as brnl,
zxks as ksmc,mzhm,zyhm, ''as brch,jcfy,jcbw from v_jianchasqd where mzhm = 91006 and sfjf=1
语法不对,首先这+N'月 掉了一个引号,另外要用||'月'这样,要用||把字段和文字拼接起来,End; 这儿end后面不能接分号,分号表示语句结束。
一品梅 2016-09-07
  • 打赏
  • 举报
回复
上面的代码报‘引号内的字符串没有正确结束'
js14982 2016-09-07
  • 打赏
  • 举报
回复
select case when months_between(sysdate,CSRQ) <1 then (sysdate-CSRQ)||'天'
            when months_between(sysdate,CSRQ) >=1 and months_between(sysdate,CSRQ) <12 then trunc(months_between(sysdate,CSRQ))||'个月'
            when months_between(sysdate,CSRQ) >=12 then trunc(months_between(sysdate,CSRQ)/12)||'岁'
            end '年龄'
from v_jianchasqd
一品梅 2016-09-07
  • 打赏
  • 举报
回复
楼上的大大,只用一条oracle语句。最好用case when then else 我写了一个,它报语法错误,你帮我看看。
select brxm,brxb,
Case when floor(months_between(sysdate,csrq)/ 12)<1 then floor(months_between(sysdate,csrq)+N'月 else floor(months_between(sysdate,csrq)/ 12)+N'年' End;  as brnl,
zxks as ksmc,mzhm,zyhm, ''as brch,jcfy,jcbw from v_jianchasqd where mzhm = 91006 and sfjf=1
ghx287524027 2016-09-07
  • 打赏
  • 举报
回复
with t as (
select 'a' as name,'1991-01-01' as csrq from dual
union all
select 'b' as name,'1993-01-07' as csrq from dual
union all
select 'c' as name,'2016-08-30' as csrq from dual
)
select name,age||'岁'||month||'月'||day||'天' from 
(select name,trunc((sysdate-to_date(csrq,'yyyy-mm-dd'))/365) age,
trunc(mod((sysdate-to_date(csrq,'yyyy-mm-dd')),365)/30) month,
trunc(mod(mod((sysdate-to_date(csrq,'yyyy-mm-dd')),365),30)) day
from t)
不知道这样满不满足你要求,没有严格考虑闰年和31天的情况

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧