【问题标题】:Using CASE clause to find age使用 CASE 子句查找年龄
【发布时间】:2014-10-18 15:55:32
【问题描述】:
SELECT * FROM hr.Employees; 

SELECT firstname,
       lastname,   
       (CASE WHEN (month(getdate()) > month(birthdate))             
             THEN datediff(yy,birthdate,getdate())              
             ELSE datediff(yy,birthdate,getdate()) -1
        END) AS _years,          --years         
       (CASE WHEN (month(getdate()) > month(birthdate))               
             THEN month(getdate()) - month(birthdate)               
             ELSE month(getdate()) - month(birthdate) +12            
        END) AS _months,     --months
       (CASE WHEN (day(getdate()) > (day(birthdate)))               
             THEN day(getdate()) - day(birthdate)                
             ELSE month(getdate()) - month(birthdate) +11  &   day(getdate()) + (day(EOMonth(birthdate)) - day(birthdate))        
        END) AS _days          --days
FROM hr.Employees

这里是在 yy,mm,dd 中查找年龄的代码。我遇到的问题是在天部分。

我想做的是(if current day < birthdate day ) 然后(currentMonth-birthmonht)+11 and day(getdate()) + (day(EOMonth(birthdate)) - day(birthdate))

【问题讨论】:

  • 这是非常糟糕的格式,SQL 看起来很糟糕。

标签: sql sql-server sql-server-2012


【解决方案1】:

我想做的是(如果当前日期

这不能在days 列中的CASE 中完成,您需要在CASE 中为month 列本身添加一个新的WHEN 子句。像下面的代码

SELECT firstname,
       lastname,   
       (CASE WHEN (month(getdate()) > month(birthdate))  THEN datediff(yy,birthdate,getdate())              
             ELSE datediff(yy,birthdate,getdate()) -1
        END) AS years,                
       (CASE WHEN (month(getdate()) > month(birthdate))  THEN month(getdate()) - month(birthdate)
             WHEN (day(getdate()) > (day(birthdate))) THEN month(getdate()) - month(birthdate) +11 
             ELSE month(getdate()) - month(birthdate) +12  
        END) AS months,    
       (CASE WHEN (day(getdate()) > (day(birthdate)))    THEN day(getdate()) - day(birthdate)                
             ELSE day(getdate()) + (day(EOMonth(birthdate)) - day(birthdate))        
        END) AS days          
FROM Employees

这是查询的 SQL fiddle 演示:SQL Fiddle

如果您可以使用 T-SQL this 答案显示如何在 T-SQL 中执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多