我想从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日的