简体   繁体   English

有关SQL查询的问题

[英]Question About SQL Query

I am using the below statement to generate age of a person in Oracle SQL and my question is below. 我正在使用以下语句在Oracle SQL中生成人员年龄,而我的问题如下。

SELECT TO_NUMBER(TO_CHAR(CURRENT_DATE,'YYYY'))-TO_NUMBER(TO_CHAR(BIRTH_DATE,'YYYY')) 
FROM NAME WHERE NAME_ID =NAME_ID

This statement is only correct upto so far that I need a statement which could count months and even days in order to get the age. 到目前为止,这句话是正确的,因此我需要一个可能要数月甚至数天才能得出年龄的声明。

Googling for 'oracle get age from dob' returns several answers 谷歌搜索“ oracle从dob获得年龄”返回几个答案

select trunc((months_between(sysdate, dob))/12) age
from name;

looks like a good solution (trunc is optional) and 看起来是一个很好的解决方案(trunc是可选的),并且

select to_number(to_char(sysdate,'YYYY')) - to_number(to_char(bth_date,'YYYY'))  +
       decode(sign(to_number(to_char(sysdate,'MMDD')) - 
                   to_number(to_char(bth_date,'MMDD'))),-1,-1,0) age
from name;

is also correct. 是正确的。

You could use the EXTRACT function like 您可以使用EXTRACT函数,例如

SELECT EXTRACT( YEAR FROM( CURRENT_DATE - BIRTH_DATE )) FROM ...

Substitute YEAR by whatever you need. 用您需要的任何内容替代YEAR。

/edit I think I misread. / edit我想我读错了。 If you need higher precisions maybe Intervals could help ( http://blagispat.blogspot.com/2007/11/heres-short-article-on-using-intervals.html ). 如果您需要更高的精度,间隔可能会有所帮助( http://blagispat.blogspot.com/2007/11/heres-short-article-on-using-intervals.html )。 (Sry but new users can only post one hyperlink). (很抱歉,新用户只能发布一个超链接)。

SELECT EXTRACT( YEAR FROM( CURRENT_DATE - BIRTH_DATE) YEAR TO MONTH ) FROM ...

or 要么

SELECT EXTRACT( DAY FROM( CURRENT_DATE - BIRTH_DATE) DAY TO SECOND ) FROM ...

which returns days. 返回天数。

Oracle supports arithmetic operations directly on DATE columns: Oracle直接在DATE列上支持算术运算:

SELECT SYSDATE - BIRTH_DATE FROM NAME WHERE NAME_ID =NAME_ID

The result here will be a number which expresses the difference in days. 这里的结果将是一个表示天数差异的数字。

If you want it in months, use this: 如果您想在几个月内使用它,请使用以下命令:

SELECT MONTHS_BETWEEN(SYSDATE, BIRTH_DATE) FROM NAME...

If you want it in years, divide MONTHS_BETWEEN by 12. 如果您希望以年为单位, MONTHS_BETWEEN除以12。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM