当前位置: 首页 > 面试题库 >

Oracle查询以计算当前年龄

柯轶
2023-03-14
问题内容

我想从Oracle表的DOB(出生日期)字段中计算当前的人的年龄。

DOB字段的数据类型为varchar,其日期以“ DD-MON-YY”格式存储。

当我从日期算起一个人的当前年龄时,10-JAN-49查询将返回负数。另外,我观察到,如果日期为13到49年,则结果为负。

例子

22-NOV-83 -valid result
09-FEB-58 --valid result
05-JUN-49 - Invalid result like -36

查询执行以供参考

select round(MONTHS_BETWEEN(sysdate,to_date(dob,'DD-MON-RR'))/12)||' Yrs' 
from birth

任何帮助表示赞赏!


问题答案:

为了解决21世纪的问题,只需稍微修改@the_silk的答案即可:

SELECT
  CASE WHEN SUBSTR(dob, -2, 2) > 13
  THEN FLOOR
        (
            MONTHS_BETWEEN
            (
                SYSDATE
            ,   TO_DATE(SUBSTR(dob, 1, 7) || '19' || SUBSTR(dob, -2, 2), 'DD-MON-YYYY')
            ) / 12
        )
  ELSE
       FLOOR(MONTHS_BETWEEN(sysdate,TO_DATE(dob,'DD-MON-YY'))/12)
  END
FROM
birth

请注意,尽管这假定‘00’和‘13’之间的任何日期年份为21世纪,所以仅当您要构建一个一次性脚本时才应使用此sql,否则它将过期并且在之前无效。长。

最好的解决方案是重建该表,将varchar列转换为date列,如Ben所暗示的那样。



 类似资料:
  • 问题内容: 我试图通过连接多个表从sql查询中获得所需的结果。由于知识有限,因此寻求大家的帮助。 我正在尝试获取每个经理和员工的审核详细信息。我有3张桌子: 以下是 HR 表的示例数据: 以下是 REQUIRED_AUDITS 表的示例数据: 以下是 SCORE_ENTRY 表的示例数据: 因此,现在我想显示每个经理需要进行的审核数量,完成的数量以及完成的百分比。 计算方法如下: 1.要计算审核数

  • 我正在开发一个程序,它采用开始日期和结束日期,并返回年、月和日的不同值。每个类别都有自己的代码部分,这是我一直在使用的代码,到目前为止,它一直是半精确的,直到几天(有时是几个月。我甚至不想在这一点上愚弄闰年) Ex Start:04/10/2000 End:04/10/2006应该给我6年零个月零天。 年份代码: 月份代码: 天数代码:我已经尝试了多个版本,但没有太大的成功,例如,我可以计算天数之

  • 问题内容: 我想计算上个月的总订单金额。 我得到了从当前日期获取当前月份数据的查询。 现在,我如何仅获取前一个月的数据,不包括本月。 例如,本月(7月)我赚了15,000美元,上个月(6月)我赚了14,000美元。 通过运行上述查询,我​​得到了$ 15,000。 但是我不知道如何计算上个月。 问题答案: 在这里,您可以使用它在MySQL中获取上个月的第一个月到上个月的最后一天之间的日期:

  • 我正在使用Hibernate作为ORM进行Java EE项目,我已经到了一个阶段,我必须在我的类上执行一些数学计算,比如和、计数、加法和除法。 我有两个解决方案: 选择我的类并在代码中以编程方式应用这些操作 对命名查询进行计算

  • 问题内容: 我想计算两个日期之间的年数。 例如:- 这将导致335天。我想用几年来展示,这将是几年。 问题答案: 只需执行此操作(除以 365.242199 ): 1年= 365.242199天 或者 使用MONTHS_BETWEEN尝试类似的事情:- 或者您也可以尝试以下方法: 335 / 365.242199 = 0.917199603,而不是.97

  • 问题内容: 考虑到他们的DOB格式为dd / mm / yyyy,我正在寻找一种计算人的年龄的方法。 我一直在使用以下功能,该功能在几个月内都可以正常工作,直到某种故障导致while循环永远不会结束并且使整个站点陷入瘫痪。由于每天有近100,000个DOB多次通过此功能,因此很难确定造成此问题的原因。 有人有更可靠的年龄计算方法吗? 编辑:此函数的某些时间似乎可以正常工作,但对于14年9月14日的