Php 如何在函数选择中使用IF和ELSE?

Php 如何在函数选择中使用IF和ELSE?,php,mysql,sql,function,if-statement,Php,Mysql,Sql,Function,If Statement,以下代码将根据公历计算年龄: 我有两行sql代码,我将使用IF和ELSE 这就是我想要的: 问:在上面的代码中,如果工作正常,但是其他不工作 更多信息:不必使用当前日期,任何可以用来解决此问题的内容。如果我们输入任何名称,它也会起作用!!!!因为当前日期是2015年,所以我将其用于样本 谢谢你我要把你所有的东西都粉碎成一个mysql,否则: IF(YEAR(CURRENT_DATE)>1600, FLOOR((TO_DAYS(GREATEST(IF(decease_date='000

以下代码将根据公历计算年龄: 我有两行sql代码,我将使用IF和ELSE

这就是我想要的:

问:在上面的代码中,如果工作正常,但是其他不工作

更多信息:不必使用当前日期,任何可以用来解决此问题的内容。如果我们输入任何名称,它也会起作用!!!!因为当前日期是2015年,所以我将其用于样本


谢谢你

我要把你所有的东西都粉碎成一个mysql,否则:

IF(YEAR(CURRENT_DATE)>1600, 

FLOOR((TO_DAYS(GREATEST(IF(decease_date='0000-00-00',CURRENT_DATE,decease_date),
IFNULL(decease_date,CURRENT_DATE))) - TO_DAYS(birth_date)) / 365),

(FLOOR((TO_DAYS(GREATEST(IF(decease_date='0000-00-00',CURRENT_DATE,decease_date),
IFNULL(decease_date,CURRENT_DATE))) - TO_DAYS(birth_date)) / 365.25) - 621)

) as age

因此,如果条件,中间的sql,或者底部的sql=列年龄。

如果我理解正确,你想计算一个人的年龄, 在特定的出生和死亡日期之前。后者可以是0000-00-00或NULL,两者都可以 意思是这个人还活着。此外,您还希望检测日期 由波斯日历给出,并相应地更正计算。 假设日期在1600年之前,与波斯历法一致

描述中似乎有两个错误:

  • 您提到您想用1600检查当前的_日期,但这没有意义,因为 当前_日期是今天的日期,并且始终大于1.1.1600。 我认为这是一个错误,出生日期是预定的
  • 在一种情况下,公式中有365,在另一种情况下,公式中有365.25。它们都应该是365.25
  • 公式的一些优化:

    关于死亡日期的部分可以缩短:

    IFNULL(NULLIF(decease_date, '0000-00-00'),CURRENT_DATE)
    
    这会将“0000-00-00”视为NULL,然后将NULL替换为当前_日期

    原始公式计算死亡日期和出生日期之间的天数差,然后 将结果除以365.25,得到它们之间的年数。但是为了得到号码 使用该函数可以完成两天之间的年数,因此您可以获得:

    TIMESTAMPDIFF(YEAR, 
        IFNULL(NULLIF(decease_date, '0000-00-00'), CURRENT_DATE), 
        birth_date) as age
    
    最后,您需要执行波斯日历检测。请注意,如果死者 理论上没有必要做任何不同的事情;我们可以假设出生日期和死亡日期是相同的 由同一日历给出,因此年龄将正确计算。 如果此人没有死亡日期(即此人仍然活着),则会出现差异。 在这种情况下,您需要检查出生日期是否在1600(波斯语)之前 日历)并从结果中减去621年。 现在,尽管这是一种方法,但我建议另一种方法: 我们可以对总结果进行模运算,实际上可以归结为 减去621表示年龄会比这高。我们使用(与MOD函数相同):


    就这样。不需要另一个IF。

    请显示您的数据表架构、存储的数据样本和预期结果。当您计算年龄时,为什么需要死亡日期?要计算一个人的年龄,通常你只需要他的出生日期和当前日期?我更新了我的问题,死亡日期是指患者死亡时的年龄和他的年龄!!在临床史上,为什么?你为生日保留什么样的数值?在我们的日历中,一年是365.25,但你把365作为生日。在这两种情况下都不应该是365.25吗?它不起作用,需要找到另一种方法来使用if和else。
    TIMESTAMPDIFF(YEAR, 
        IFNULL(NULLIF(decease_date, '0000-00-00'), CURRENT_DATE), 
        birth_date) as age
    
    TIMESTAMPDIFF(YEAR, 
        IFNULL(NULLIF(decease_date, '0000-00-00'),
            CURRENT_DATE), 
        birth_date) % 621 as age