SQL表值函数Age

时间:2017-10-05 07:10:13

标签: sql sql-server user-defined-functions

我正在尝试构建一个用于计算年龄的tvf。目前,我正在使用此代码,这会带来一些问题。

代码:

IF ( MONTH (GETDATE()) = (SELECT MONTH (ISNULL (PERS_DateBirth, '1900-01-01')) 
                          FROM T_Person) 
     AND DAY (GETDATE()) >= (SELECT DAY (ISNULL(PERS_DateBirth, '1900-01-01')) 
                             FROM T_Person)
     OR MONTH (GETDATE()) > (SELECT MONTH (ISNULL (PERS_DateBirth, '1900-01-01')) 
                             FROM T_Person)
   )
SELECT YEAR (GETDATE()) - YEAR (ISNULL (PERS_DateBirth, '1900-01-01')) 
FROM T_Person
ELSE SELECT YEAR (GETDATE()) - YEAR (ISNULL (PERS_DateBirth, '1900-01-01')) - 1  
     FROM T_Person

问题:

  1. 子查询返回的值超过1。考虑到上面的代码,这怎么可能呢?
  2. 任何人都可以帮我改写这个,所以它可以是一个tvf,可能使用CASE WHEN。
  3. PS。我更喜欢上面的构造/逻辑,而不是使用365,25天的DATEDIFF构造等等。

    感谢大家的帮助,如果上面的代码不清楚,请告诉我。

0 个答案:

没有答案