很簡單的SQL題「知道生日怎樣求年齡」

時間 2021-06-30 11:36:08

1樓:匿名使用者

這個功能如果在sql裡做,不是乙個很簡單的sql題了。

不過思路其實很簡單:

上次提供給你的寫法的確是有點問題。請看下面的解釋:

相隔年數:生日與現在對比很容易計算得到,要注意,如果出生日期比現在遲則需要減1,因為你計算的是周歲;

月數:( 生日 + 相隔年數 )與現在對比得到,同樣,如果生日日期比現在遲則需要減1;

日數:( 生日 + 相隔年數 + 月數)與現在對比得到,如果今天不算,那麼減1,如果今天算,那麼不減。

具體就是:

「年」=

select

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end「月」=

select

case

when datepart( day, 生日) > datepart( day, getdate() ) then

datediff(mm,dateadd( yy,

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,

生日 ),

getdate()) -1

else datediff(mm,dateadd( yy,

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,

生日 ),

getdate())

end「日」=

select datediff(day, dateadd( mm, case

when datepart( day, 生日) > datepart( day, getdate() ) then

datediff(mm,dateadd( yy,

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,

生日 ),

getdate()) -1

else datediff(mm,dateadd( yy,

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,

生日 ),

getdate())

end, dateadd( yy, case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,生日)),getdate())

把年月日連線起來,就是:

select

convert( varchar,

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end)

+' 年 '+

convert( varchar,

case

when datepart( day, 生日) > datepart( day, getdate() ) then

datediff(mm,dateadd( yy,

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,

生日 ),

getdate()) -1

else datediff(mm,dateadd( yy,

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,

生日 ),

getdate())

end) +' 月 '+

convert( varchar,

datediff(day, dateadd( mm, case

when datepart( day, 生日) > datepart( day, getdate() ) then

datediff(mm,dateadd( yy,

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,

生日 ),

getdate()) -1

else datediff(mm,dateadd( yy,

case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,

生日 ),

getdate())

end, dateadd( yy, case

when datepart( dy, 生日) > datepart( dy, getdate() ) then datediff( yy,生日,getdate()) -1

else datediff( yy,生日,getdate())

end,生日)),getdate())

) + ' 日 '

像這種問題,一般不會在sql中來做的,因為相對來說太複雜了。一般會在前台程式**裡實現,不過既然你提出這個問題來了,我就研究了幾個小時,算是對新人的支援,呵呵。

2樓:匿名使用者

update jtcyb set 年齡=

dateadd(year,datediff(year,生日,getdate()),生日)

3樓:匿名使用者

update jtcyb set 年齡=datediff('y',生日,getdate())

4樓:

如果生日欄位是日期型的:

select datediff(year,生日,getdate()) as 年齡,convert(varchar,生日,120) as 生日 from jtcyb

5樓:熊冰昳

date:型別tdatetime;值:'2008/01/21'

select convert(nvarchar,date,1) from table

返回格式:01/21/08

select convert(nvarchar,date,2) from table

返回格式:08.01.21

select convert(nvarchar,date,3) from table

返回格式:21/01/08

select convert(nvarchar,date,4) from table

返回格式:21.01.08

select convert(nvarchar,date,5) from table

返回格式:21-01-08

select convert(nvarchar,date,6) from table

返回格式:21 01 08

select convert(nvarchar,date,7) from table

返回格式:01 21, 08

select convert(nvarchar,date,8) from table

返回格式:00:00:00

select convert(nvarchar,date,9) from table

返回格式:01 21 2008 12:00:00:000am

select convert(nvarchar,date,10) from table

返回格式:01-21-08

select convert(nvarchar,date,11) from table

返回格式:08/01/21

select convert(nvarchar,date,12) from table

返回格式:080121

select convert(nvarchar,date,13) from table

返回格式:21 01 2008 00:00:00:000

select convert(nvarchar,date,14) from table

返回格式:00:00:00:000

你應該用上邊的最後乙個引數為11的。

如何用sql語句把出生日期計算年齡,比如是1984-2-16怎麼算出年齡啊

6樓:匿名使用者

計算年齡就是,計算當前時間與出生日期的年份差的過程,所以用到datediff 函式。

一、datediff 函式簡介

1、函式功能:返回兩個日期之間的間隔指定單位值。

2、語法:datediff ( date-part, date-expression-1, date-expression-2 )

date-part :指定要測量其間隔的日期部分,常用引數說明

date-expression-1 某一間隔的起始日期。

date-expression-2 某一間隔的結束日期。

函式返回值:從date-expression-2 值中減去 date-expression-1,返回兩個引數之間 date-parts 的值。

3、範例演示:

select datediff( hh, '4:00am', '5:50am' )下面的語句返回 102:

select datediff( mm, '1987/05/02', '1995/11/15' )下面的語句返回 0:

select datediff( dd, '00:00', '23:59' )下面的語句返回 4:

select datediff( dd,'1999/07/19 00:00','1999/07/23 23:59' )下面的語句返回 0:

select datediff( mm, '1999/07/19', '1999/07/23' )下面的語句返回 1:

select datediff( mm, '1999/07/19', '1999/08/23' )

二、通過出生日期計算年齡的例項

1、例項**:a_test

2、sql語句如下:

select bh,rq,

case when datediff(yy,rq,getdate()) = 0

then cast(datediff(mm,rq,getdate()) as char(3))  +'個月'

else cast(datediff(yy,rq,getdate()) as char(3))  +'歲'

end  as '年齡'

from a_test;

語句解析:語句主體部分

case when datediff(yy,rq,getdate()) = 0

then cast(datediff(mm,rq,getdate()) as char(3))  +'個月'

else cast(datediff(yy,rq,getdate()) as char(3))  +'歲'

end  as '年齡'

datediff函式計算出生日期rq與系統當前時間getdate()的年份差值,如果差值大於0,就計算月份差,顯示月份為年齡。

語句結果如圖:

閱讀題 很簡單,很簡單的閱讀題目

這段話作者按照從 靜態 到 動態 的順序描寫了 雪后 的景象,進行靜態描寫的句子是 山川 河流 樹木 房屋,全都罩上了一層厚厚的雪,萬里江山,變成了粉妝玉砌的世界。落光了葉子的柳樹上掛滿了毛茸茸亮晶晶的銀條兒 而那些冬夏常青的松樹和柏樹上,則掛滿了蓬鬆鬆沉甸甸的雪球兒。這句話寫出了 柳樹 松樹 柏樹...

數學簡單4題很簡單的

1.x 2 3 2x x 2 2x 3 0 2a分之 b加減根號b 2 4ac 2分之 2加減根號16 x1 2 x2 4 2.2m 2 3m 4 0 2m 2 3m 4 0 2a分之 b加減根號b 2 4ac 4分之3加減根號36 x1 2 x2 1 3.3 2a 2 a 1 4 0 6a 2 4...

很簡單的4道數學題,4道數學題很簡單的!

1.解 設上海到天津的鐵路長x千公尺,則行了全程的5 8,就是5 8千公尺,剩下的路程是114 5千公尺,兩段路程相加就是全長了.根據題意列出方程 5 8x 114 5 x 3 8x 114 5 x 114 5 8 3 x 1520 答 上海到天津的鐵路長1520千公尺.或者是1520000公尺.2...