暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 需要计算年龄作为选择的一部分

ASKTOM 2020-09-16
335

问题描述

嗨,
几周前我们刚刚在甲骨文上直播。我有一个遗留进程,其中包括运行为Sybase编码的脚本。我已经将大部分转换为Oracle,但是在年龄字段上遇到了麻烦 (这是我需要工作的最后一块)。我想过只包括老年片...然后考虑将整个脚本包含在上下文中 (如果没有其他内容)。
提前感谢您的协助!
-丹尼斯

当前遗留代码
SELECT DISTINCT 
   meme.MEME_MEDCD_NO,
   meme.MEME_BIRTH_DT,
   AGE =
      CASE WHEN 
         (
         month(convert(datetime, meme.MEME_BIRTH_DT, 103))*100)+
           day(convert(datetime, meme.MEME_BIRTH_DT, 103)) - 
              ((month(getdate())*100)+day(getdate())) <= 0 THEN 
              DATEDIFF(YEAR,convert(datetime, meme.MEME_BIRTH_DT, 103),getdate())
      ELSE 
         DATEDIFF(YEAR,convert(datetime, meme.MEME_BIRTH_DT, 103),getdate())-1
      END,
   sbsb.SBSB_ID, 
   mepe.MEPE_EFF_DT, 
   mepe.MEPE_TERM_DT, 
   mepe.MEPE_ELIG_IND, 
   mepe.CSPI_ID,
   sbad.SBAD_COUNTY AS 'Member_County',
   pdpd.LOBD_ID
FROM 
   dbo.CMC_MEME_MEMBER meme
   INNER JOIN dbo.CMC_MEPE_PRCS_ELIG mepe ON
      mepe.MEME_CK =meme.MEME_CK
   INNER JOIN dbo.CMC_SBSB_SUBSC     sbsb ON
      sbsb.SBSB_CK = meme.SBSB_CK
   INNER JOIN CMC_PDPD_PRODUCT       pdpd ON 
      mepe.PDPD_ID = pdpd.PDPD_ID
   INNER JOIN CMC_SBAD_ADDR          sbad ON
      sbsb.SBSB_CK = sbad.SBSB_CK AND
      sbsb.SBAD_TYPE_MAIL = sbad.SBAD_TYPE
WHERE 
   mepe.GRGR_CK IN (1,3,8)       AND
   mepe.MEPE_ELIG_IND = 'Y'      AND
   mepe.MEPE_EFF_DT  <= '09/01/2020' AND  -- Match file date
   mepe.MEPE_TERM_DT >= '09/01/2020' AND  -- Match file date
   meme.MEME_MEDCD_NO IN   
   (   
   )
复制


专家解答

康纳最近发了一篇关于这个话题的帖子 :)

https://connor-mcdonald.com/2020/09/11/age-calculations-just-how-old-are-you/

要注意的关键点是,在进行日期计算时,到处都有边缘情况。

克服这些问题的一种方法是

-将当前日期和出生日期转换为YYYYMMDD表格中的数字
-从当前日期值中减去出生值
-除以10,000
-拿这个的地板/trunc

例如:

trunc (
 (to_number ( to_char ( sysdate, 'YYYYMMDD' ) ) -
  to_number ( to_char ( birth_dt, 'YYYYMMDD' ) )
 ) / 10000
) calculated_age
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论