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...