根據(jù)出生日期查詢年齡用的還挺多的。
網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)頁設(shè)計(jì),高端網(wǎng)頁制作,對成都三維植被網(wǎng)等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計(jì),網(wǎng)站優(yōu)化推廣哪家好,專業(yè)網(wǎng)站推廣優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。
簡單分析一下,加入一個(gè)孩子五歲半了,那習(xí)慣認(rèn)為他還是5歲。
用Oracle提供的months_between()函數(shù),先獲取出生日期和當(dāng)前日期的月數(shù),然后除以12向下取整:
使用的時(shí)候,將時(shí)間段替換成出生日期對應(yīng)的字段即可。
如果,計(jì)算年齡用的次數(shù)非常多,最好寫成自定義函數(shù)。
用month_between做,應(yīng)該會(huì)好一些。
select
當(dāng)前日期,
出生日期,
trunc(months_between(當(dāng)前日期,出生日期)/12) 年數(shù),
trunc(months_between(當(dāng)前日期,出生日期))%12 月數(shù),
ceil(當(dāng)前日期-add_month(出生日期,trunc(months_between(當(dāng)前日期,出生日期))) 天數(shù) from table
可能一些細(xì)微的地方還需要些調(diào)整,不過大體上應(yīng)該差不多了。
最后那個(gè)ceil可能要分成兩個(gè)case when的部分是
case when substr(to_char(當(dāng)前日期,'yyyy-mm-dd'),-5) != substr(to_char(出生日期,'yyyy-mm-dd'),-5) then trunc(當(dāng)前日期-add_month(出生日期,trunc(months_between(當(dāng)前日期,出生日期)))
when substr(to_char(當(dāng)前日期,'yyyy-mm-dd'),-5) = substr(to_char(出生日期,'yyyy-mm-dd'),-5) then 1 end 天數(shù)
我看了下你上面的兩個(gè)例子,好像因?yàn)槿掌谙嗟缺容^特殊,所以我嘗試用ceil試試,如果不行那么就用下面這個(gè),我估計(jì)差不多了,不過我可沒有環(huán)境,只能是憑空想象,剩下的只能你自己去實(shí)驗(yàn)和修改了。
年齡段統(tǒng)計(jì)可用case when 語句。
如test表中有以下數(shù)據(jù):
其中18-29歲為青年,30-49歲為中年,50歲以上為老年,先統(tǒng)計(jì)各個(gè)年齡段人數(shù),可用如下語句:
select?case?when?age?between?18?and?29?then?'青年'?when?age?between?30?and?59?then?'中年'?when?age=60?then?'老年'?end?as?年齡段,
count(*)?as?人數(shù)?
from?test
group?by?case?when?age?between?18?and?29?then?'青年'?when?age?between?30?and?59?then?'中年'?when?age=60?then?'老年'?end;
統(tǒng)計(jì)結(jié)果: