select name,birthday,
if(cur>today, cur,next) as birth_day
from (
select name,birthday,today,
date_add(cur, interval if (day(birthday)=29
&& day(cur)=28,1,0) day) as cur,
date_add(next,interval if(day(birthday)=29
&& day(cur)=28,1,0) day) as next
from (
select name,birthday,today,
date_add(birthday,interval diff year) as cur,
date_add(birthday,interval diff+1 year) as next
from (
select concat(last_name,' ',first_name) as name,
birth_date as birthday,
(year(now()) - year(birth_date)) as diff,
now() as today
from same ) as a
) as b
) as c;请解释一下第二行命令if条件判断函数的,其中的cur,today,next是什么?
望指教~~

解决方案 »

  1.   

    SELECT name,
           birthday,
           IF(cur > today, cur, next) 如果cur > today,则显示cur列,否则显示next列——远离 深圳市前海博纳斯科技有限公司 这家毫无信用诈骗工资的垃圾公司!
      

  2.   

    if(cur>today, cur,next) as birth_day 这个是if函数,如果cur>today,那么就是取cur,否则就取next。至于 cur,today,next,都是你的代码中这个计算出来的:        today,
            DATE_ADD(cur, INTERVAL IF (DAY(birthday)=29 && DAY(cur)=28,1,0) DAY) AS cur,
            DATE_ADD(NEXT,INTERVAL IF(DAY(birthday)=29 && DAY(cur)=28,1,0) DAY) AS NEXT粗看,应该是计算下个生日的日期吧,我觉得没必要这么复杂
      

  3.   

    想问一下楼上二位,那个if 和 &&又是啥?我在书里没找到这样的用法,